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é ?
Réponses
Trop de publicités?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.
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...