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)

È stato utile?

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]

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top