Je veux que mon application boucle en python mais ait un moyen de quitter. Existe-t-il un moyen d'obtenir des entrées à partir de la console, de le scanner pour la lettre q et rapide lorsque mon application est prête à quitter? en C je voudrais juste créer un pthread qui attend cin, scans, verrouille un var global, changer, déverrouiller et quitter le thread permettant à mon application de quitter quand il est fait dumping un fichier ou w/e il fait. Est-ce que je fais cela de la même manière en python et sera-t-il cross-plateforme? (Je vois une seule instance globale en python qui était spécifique à Windows)console Python intrus? et les threads multiplateformes
Répondre
Utilisez le module de threading pour créer une classe de thread.
import threading;
class foo(threading.Thread):
def __init__(self):
#initialize anything
def run(self):
while True:
str = raw_input("input something");
class bar:
def __init__(self)
self.thread = foo(); #initialize the thread (foo) class and store
self.thread.start(); #this command will start the loop in the new thread (the run method)
if(quit):
#quit
Créer un nouveau fil est assez facile - le module de filetage vous aidera. Vous pouvez vouloir le rendre démoniaque (si vous avez d'autres moyens de quitter votre programme). I pense vous pouvez changer une variable sans verrouillage, aussi - python implémente ses propres threads, et je suis assez sûr que quelque chose comme self.running = False
sera atomique.
La façon la plus simple pour lancer un nouveau thread est avec threading.Thread(target=)
:
# inside your class definition
def signal_done(self):
self.done = True
def watcher(self):
while True:
if q_typed_in_console():
self.signal_done()
return
def start_watcher(self):
t = threading.Thread(target=self.watcher)
t.setDaemon(True) # Optional; means thread will exit when main thread does
t.start()
def main(self):
while not self.done:
# etc.
Si vous voulez que votre fil pour être plus intelligent, avoir son propre état, etc., vous pouvez sous-classe threading.Thread
vous. Les docs en ont plus.
[lié à ceci: l'exécutable python lui-même est mono-thread, même si vous avez plusieurs threads python]