python interrupção console? e fios transversais da plataforma
-
22-08-2019 - |
Pergunta
Eu quero meu aplicativo para fazer um loop em python, mas tem uma maneira de sair. Existe uma maneira de obter a entrada do console, digitalizá-lo para a letra q e rápida quando meu aplicativo está pronto para sair? em C Gostaria apenas de criar um pthread que espera por cin, scans, bloqueia um mundial sair var, mudança, desbloqueio e sair o fio permitindo que meu aplicativo para sair quando o seu feito despejar um arquivo ou w / e que está fazendo. Eu faço isso da mesma maneira em python e vai ser multiplataforma? (I ver um única instância global em python que foi janelas específico)
Solução
usar o módulo de threading para fazer uma 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
Outras dicas
A criação de um novo segmento é bastante fácil - o módulo de threading irá ajudá-lo. Você pode querer fazer isso daemonic (se você tiver outras maneiras de sair do seu programa). I pensar você pode mudar uma variável sem bloqueio, também -. Python implementa as suas próprias threads, e estou bastante certo de algo como self.running = False
será atômica
A maneira mais simples para lançar um novo segmento é com 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 você quiser que o seu segmento a ser mais inteligente, tem seu próprio estado, etc, você pode subclasse threading.Thread
si mesmo. Os médicos têm mais.
[relacionada com esta: o próprio executável python é single-threaded, mesmo se você tiver vários segmentos python]