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)

Foi útil?

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]

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top