Question

J'ai deux entiers dans mon programme; Appelons-les « a » et « b ». Je voudrais les ajouter ensemble et obtenir un autre entier en conséquence. Ce sont des objets réguliers int Python. Je me demande; comment puis-je les ajouter avec Twisted? Y at-il un endroit spécial de la fonction performAsynchronousAddition? Ai-je besoin d'un Deferred? Qu'en est-il du réacteur? le réacteur est impliqué?

Était-ce utile?

La solution

OK, pour être clair.

Twisted ne fait rien ??cpu tâches liées et pour une bonne raison. il n'y a pas moyen de faire un travail lié Compute aller plus vite tout en réorganisant sous-tâches; la seule chose que vous pourriez faire est d'ajouter plus de ressources de calcul; et même que ne fonctionnerait pas en python à cause d'une subtilité de sa mise en œuvre.

Twisted offre une manipulation boucle sémantique spéciale et d'événements dans le cas où le programme deviendrait « coincé » en attente de quelque chose à l'extérieur si son contrôle; plus généralement un processus en cours d'exécution sur une autre machine et communiquer avec votre processus torsadé sur une connexion réseau. Puisque vous seriez en attente de toute façon, tordue vous donne un mécanisme pour faire avancer les choses dans l'intervalle. C'est-à-dire tordue fournit pour concurrency ??E / S tâches Bound

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

Autres conseils

Que diriez-vous ceci:

c = a + b

Cela devrait fonctionner, et il n'a pas besoin d'être fait de manière asynchrone (il est assez rapide).

Bonne question, et Twisted (ou Python) devraient avoir un moyen d'au moins spawn "a + b" à plusieurs noyaux (sur mon 8 Core i7).

Malheureusement, le GIL Python empêche que cela se produise, ce qui signifie que vous devrez attendre, non seulement pour la tâche liée CPU, mais pour un noyau faire le travail, alors que les sept autres noyau ne font rien.

Note: Peut-être un meilleur exemple serait "un () + b ()", ou même "fait (sqrt (a () ** b ())", etc., mais le fait important est que l'opération ci-dessus verrouillera un noyau et le GIL à peu près empêche Python pour faire quoi que ce soit d'autre au cours de cette opération, qui pourrait être plusieurs ms ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top