python console interrupt? e fili trasversali della piattaforma
-
22-08-2019 - |
Domanda
Voglio che la mia app per ciclo in Python, ma hanno un modo per smettere. C'è un modo per ricevere input dalla console, la scansione per q lettera e veloce quando la mia app è pronta per uscire? in C vorrei solo creare un pthread che attende CIN, scansioni, blocca un globale smettere var, il cambiamento, sbloccare e uscire il filo che consente la mia app per uscire quando il suo fare scarico un file o w / e che sta facendo. Faccio questo nello stesso modo in Python e sarà multi-piattaforma? (Vedo una singola istanza globale in python che era finestre specifico)
Soluzione
utilizzare il modulo threading creare una classe 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
Altri suggerimenti
La creazione di un nuovo thread è abbastanza facile - il modulo threading vi aiuterà fuori. Si consiglia di rendere più demoniaco (se si dispone di altri modi di uscire il vostro programma). I pensare è possibile modificare una variabile senza bloccaggio, troppo - pitone attua le proprie discussioni, e sono abbastanza sicuro qualcosa come self.running = False
sarà atomica
Il modo più semplice per dare il via un nuovo thread è con 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.
Se si desidera che il thread per essere più intelligente, avere un proprio stato, ecc è possibile creare una sottoclasse threading.Thread
te stesso. La documentazione hanno più.
[legati a questo: il pitone stesso eseguibile è single-threaded, anche se si dispone di più thread di Python]