48 votes

Comment additionner deux entiers avec Twisted ?

J'ai deux entiers dans mon programme ; appelons-les " a " y " b ". Je voudrais les additionner et obtenir un autre nombre entier comme résultat. Il s'agit d'expressions Python ordinaires int des objets. Je me demande comment les ajouter ensemble avec Twisted ? Existe-t-il une méthode spéciale performAsynchronousAddition quelque part ? Ai-je besoin d'un Deferred ? Et le réacteur ? Le réacteur est-il impliqué ?

42voto

IfLoop Points 59461

OK, pour être clair.

Twisted ne fait rien pour _tâches liées au processeur_ et pour de bonnes raisons. il n'y a aucun moyen d'accélérer une tâche liée au calcul en réorganisant les sous-tâches ; la seule chose que l'on puisse faire est d'ajouter des ressources de calcul supplémentaires ; et même cela ne fonctionnerait pas dans Python à cause d'une subtilité de son implémentation.

Twisted offre une sémantique spéciale et une gestion des boucles d'événements au cas où le programme deviendrait " coincé "Il s'agit le plus souvent d'un processus s'exécutant sur une autre machine et communiquant avec votre processus tordu via une connexion réseau. Puisque vous seriez en attendant Quoi qu'il en soit, la torsion vous donne un mécanisme pour faire plus de choses en attendant. En d'autres termes, twisted fournit de la concurrence pour _Tâches liées aux E/S_

tl;dr : twisted est pour le code réseau. Tout le reste est du python normal.

8voto

Keith Points 13800

Que dites-vous de ça ?

c = a + b

Cela devrait fonctionner, et il n'est pas nécessaire de le faire de manière asynchrone (c'est assez rapide).

-7voto

renejsum Points 13

Bonne question, et Twisted (ou Python) devrait avoir un moyen d'au moins faire apparaître "a + b" sur plusieurs cœurs (sur mon i7 à 8 cœurs).

Malheureusement, la GIL Python empêche cela, ce qui signifie que vous devrez attendre, non seulement la tâche liée au CPU, mais aussi qu'un seul cœur effectue le travail, tandis que les sept autres cœurs ne font rien.

Note : Peut-être qu'un meilleur exemple serait "a() + b()", ou même "fact(sqrt(a()**b())" etc. mais le fait important est que l'opération ci-dessus verrouillera un coeur et que la GIL empêche pratiquement Python de faire quoi que ce soit d'autre pendant cette opération, qui peut durer plusieurs ms...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X