python asynchronous twisted addition arithmetic-expressions

python - ¿Cómo agrego dos enteros junto con Twisted?



plt title position (3)

Buena pregunta, y Twisted (o Python) debería tener una forma de al menos engendrar "a + b" de varios núcleos (en mi 8 core i7).

Desafortunadamente, el Python GIL evita que esto suceda, lo que significa que tendrá que esperar, no solo para la tarea vinculada a la CPU, sino también para un núcleo haciendo el trabajo, mientras que los otros siete núcleos no están haciendo nada.

Nota: Tal vez un mejor ejemplo sería "a () + b ()", o incluso "hecho (sqrt (a () ** b ())" etc. pero el hecho importante es que la operación anterior bloqueará un núcleo y el GIL prácticamente evita que Python haga otra cosa durante esa operación, que podría ser de varios ms ...

Tengo dos enteros en mi programa; llamémosles " a " y " b ". Me gustaría sumarlos y obtener otro entero como resultado. Estos son objetos regulares de Python int . Me pregunto; ¿Cómo los agrego junto con Twisted? ¿Hay una función especial performAsynchronousAddition alguna parte? ¿Necesito un Deferred ? ¿Qué hay del reactor? ¿El reactor está involucrado?


OK, para ser claro.

Twisted no hace nada acerca de las tareas vinculadas a la CPU y por una buena razón. no hay forma de hacer que un trabajo enlazado informático vaya más rápido reordenando subtareas; lo único que podrías hacer es agregar más recursos informáticos; e incluso eso no funcionaría en Python debido a la sutileza de su implementación.

Twisted ofrece semántica especial y manejo de bucles de eventos en caso de que el programa se " atasque " esperando algo afuera si tiene control; lo más normal es que un proceso se ejecute en otra máquina y se comunique con su proceso retorcido a través de una conexión de red. Ya que estarías esperando de todos modos, Twisted te da un mecanismo para hacer más cosas mientras tanto. Es decir, twisted proporciona concurrencia para tareas de E / S encuadernadas

tl; dr: twisted es para código de red. Todo lo demás es solo python normal.


Qué tal esto:

c = a + b

Eso debería funcionar, y no necesita hacerse de forma asíncrona (es bastante rápido).