2017-05-12 1 views
0

J'essaie de comprendre à quoi sert eventlet.tpool. Les docs disent que tpool.execute() vous permet de prendre une fonction de blocage et de l'exécuter dans un nouveau thread. Cependant, la méthode tpool.execute() se bloque jusqu'à ce que le thread soit terminé! Alors, comment cela est-il utile? Si j'ai une fonction de blocage/exécution longue myfunc() et l'appelle directement, elle bloquera. Si je l'appelle à l'intérieur de tpool.execute (myfunc) alors l'appel de tpool.execute (myfunc) bloquera. Quelle est exactement la différence? La seule chose que je peux deviner est que quand myfunc() est appelé directement, il bloque non seulement cette coroutine mais empêche également d'autres coroutines de fonctionner, tandis que l'appel à tpool.execute() bloquera la coroutine actuelle mais cédera en quelque sorte que d'autres coroutines peuvent fonctionner. Est-ce le cas? Sinon, je ne vois pas comment tpool peut être utile.Comment eventlet tpool est-il utile?

Répondre

1

Vous avez écrit la réponse vous-même, je ne peux que la reformuler. En ce qui concerne Eventlet, Gevent, Twisted, Asyncio et d'autres bibliothèques coopératives multitâches, nous utilisons le terme «blocage» pour indiquer qu'il bloque tout. time.sleep(1) non corrigé bloquera toutes les coroutines/greenthreads par opposition à la sémantique des threads du système d'exploitation, ce qui bloquerait uniquement le thread OS appelant et permettrait aux autres threads du système d'exploitation de continuer.

Pour différencier les choses qui bloquent le thread OS des choses qui bloquent la coroutine/greenthread, nous utilisons le terme "yielding". Une fonction qui cède est celle qui permet l'exécution au repos des coroutines, tout en bloquant (en raison de la sémantique d'exécution de Python) uniquement la coroutine de l'appelant. Armé de cette puissante terminologie, tpool.execute() transforme l'appel bloquant en un.

Combiné avec eventlet.spawn(tpool.execute, fun, ...), il ne bloquerait même pas la coroutine de l'appelant. Peut-être que vous trouvez cela une combinaison utile.

Et les correctifs sont toujours les bienvenus. Eventlet est une excellente bibliothèque car elle contient des efforts combinés de nombreuses personnes formidables.