Pregunta

Los expertos Stackless,

I han logrado crear tasklets bajo Stackless Python (ambos de la Stackless y el lado C).

Me parece que con el fin de crear un tasklet en Stackless, que se unen a un pitón arbitraria exigible (función) a la tasklet (así como los parámetros requeridos), por lo que el límite exigible se ejecuta como un tasklet. Sin embargo, un exigible arbitraria en realidad podría tener un valor de retorno que es importante para la persona que llama. Pero todavía tengo que ver una manera de recuperar el valor de retorno de la carrera se puede llamar como una cota tasklet.

En el lado puro sin apilado Python, veo un idioma de uso llamado Microgestión, que envuelve la función original con una función de gestión, que a su vez podría capturar el valor de retorno de la función original y guardar en alguna parte para su uso en algún otro contexto.

Por desgracia, mi caso de uso especial implica la creación de un tasklet desde el C (C ++) lado, la unión a un (potencialmente bloqueo) Python exigible que tiene un valor de retorno importante para ser utilizado más adelante. Parece que la escritura de una función tal Microgestión en el lado C no es muy viable, ya que no he encontrado una manera de convertir una función de C en una forma dinámica exigible PyObject (que no implican módulo de inicialización de mesa, etc.), y el uso sin estado estático función C (I asumiría el prototipo tiene que ser PyObject * (* PyObject, PyObject *)) es generalmente una mala idea bajo mundo C ++ de todos modos.

La API Stackless C también parece no contiene una función apropiada para recuperar el valor de retorno de un tasklet. ¿Es la única opción que tengo que escribir por encima de la función Microgestión mencionado ( podría tener estado) en Python, y proporcionar una manera de recuperar el alguna parte salvado valor de retorno (de una forma de estado, es decir, no usar mundial Variables)? O podría haber otras opciones que posiblemente podría explorar?

Muchas gracias,

Lin

P.S. Entiendo que en el C y el funcionamiento de la programación a nivel de sistema, el valor de retorno de una función del hilo sólo tiene sentido para el código de salida, y las funciones de hilo tendría una estricta prototipo de la función, es decir, C funciones tienen que cumplir con algunas reglas estrictas para convertirse ejecutable como / de un hilo. Y ahora estamos hablando de Python:)

¿Fue útil?

Solución

De Stackless.com:

"... Pero todavía tengo que ver una manera de recuperar el valor de retorno de la carrera se puede llamar como una cota tasklet. ..."

No sé que hay uno.

"... valor de retorno importante para usarse más tarde. Parece que la escritura de una función tal Microgestión en el lado C no es muy viable, ya que no tengo ..."

La forma más sencilla de hacer esto sería definir el código de función Python envoltura en C como una cadena, y compilarlo en un objeto función que se puede ejecutar como un tasklet. Un ejemplo de función Python sigue, la parte C lo dejo a ti.

por ejemplo.

  def RunFunctionAndGetResult(chan, func, *args, **kwargs):
      chan.send(func(*args, **kwargs))

Saludos,

Richard.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top