46 votes

Comment un threading.Thread donne-t-il le reste de son quantum en Python?

J'ai un thread qui l'interrogation d'un morceau de matériel.

while not hardware_is_ready():
    pass
process_data_from_hardware()

Mais il y a d'autres fils (et des processus!) qui pourrait avoir des choses à faire. Si oui, je ne veux pas brûler les cpu vérification du matériel tous les autres instructions. Il a été un moment depuis que j'ai traités avec filetage, et quand je l'ai fait il n'était pas de Python, mais je crois que la plupart des bibliothèques de threading ont un yield fonction ou quelque chose qui permet à un thread pour dire le planificateur de "Donner les autres threads d'une chance."

while not hardware_is_ready():
    threading.yield()          # This function doesn't exist.
process_data_from_hardware()

Mais je ne peux pas trouver aucune référence à quelque chose comme ça dans le thread de la documentation. Python a un yield déclaration, mais je suis assez sûr que c'est quelque chose de complètement différent (à faire avec des générateurs).

Quel est la bonne chose à faire ici?

81voto

Alex Martelli Points 330805

time.sleep(0) est suffisant pour donner le contrôle - pas besoin d'utiliser un epsilon positif. En effet, time.sleep(0) SIGNIFIE "céder à tout autre thread qui peut être prêt".

14voto

S.Lott Points 207588

Lire sur le Mondial de l'Interprète de Verrouillage (GIL).

Par exemple: http://jessenoller.com/2009/02/01/python-threads-and-the-global-interpreter-lock/

Aussi: http://www.pyzine.com/Issue001/Section_Articles/article_ThreadingGlobalInterpreter.html

Le faire dans votre code si vous devez faire Occupé Attente (par exemple, l'interrogation d'un appareil).

time.sleep( 0.0001 )

Cela donnera au fil du planificateur.

Aussi, j'ai recueilli quelques notes et références http://homepage.mac.com/s_lott/iblog/architecture/C551260341/E20081031204203/index.html

4voto

Jason Baker Points 56682

Si vous faites cela sur * nix, vous pourriez trouver la bibliothèque de sélection utile. Kamaela a également quelques composants que vous pouvez trouver utiles, mais cela peut nécessiter un peu de changement de paradigme.

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