1000 Stimmen

Gibt es eine Möglichkeit, einen Thread zu löschen?

Ist es möglich, einen laufenden Thread zu beenden, ohne irgendwelche Flags/Semaphoren/etc. zu setzen/zu überprüfen?

0voto

kernstock Punkte 214

Pieter Hintjens - einer der Gründer der ØMQ -Projekt -- sagt, dass die Verwendung von ØMQ und die Vermeidung von Synchronisationsprimitiven wie Locks, Mutexes, Events etc. der vernünftigste und sicherste Weg ist, Multi-Thread-Programme zu schreiben:

http://zguide.zeromq.org/py:all#Multithreading-with-ZeroMQ

Dazu gehört auch, einem untergeordneten Thread mitzuteilen, dass er seine Arbeit abbrechen soll. Dies würde geschehen, indem man den Thread mit einem ØMQ-Socket ausstattet und auf diesem Socket eine Nachricht abfragt, die besagt, dass er abbrechen soll.

Der Link bietet auch ein Beispiel für Multithreading-Python-Code mit ØMQ.

-1voto

Noob Master Punkte 59

Verwenden Sie einfach

if thread.is_alive():
     print("thread alive")
else:
     print("thread is killed")

wird der Thread automatisch gelöscht

-1voto

user1942887 Punkte 94

Sie können Ihren Befehl in einem Prozess ausführen und ihn dann mit Hilfe der Prozess-ID beenden. Ich musste zwischen zwei Threads synchronisieren, von denen einer nicht von selbst zurückkehrt.

processIds = []

def executeRecord(command):
    print(command)

    process = subprocess.Popen(command, stdout=subprocess.PIPE)
    processIds.append(process.pid)
    print(processIds[0])

    #Command that doesn't return by itself
    process.stdout.read().decode("utf-8")
    return;

def recordThread(command, timeOut):

    thread = Thread(target=executeRecord, args=(command,))
    thread.start()
    thread.join(timeOut)

    os.kill(processIds.pop(), signal.SIGINT)

    return;

-1voto

zzart Punkte 10506

Dies scheint mit pywin32 unter Windows 7 zu funktionieren

my_thread = threading.Thread()
my_thread.start()
my_thread._Thread__stop()

-2voto

Sud Punkte 183

Starten Sie den Sub-Thread mit setDaemon(True).

def bootstrap(_filename):
    mb = ModelBootstrap(filename=_filename) # Has many Daemon threads. All get stopped automatically when main thread is stopped.

t = threading.Thread(target=bootstrap,args=('models.conf',))
t.setDaemon(False)

while True:
    t.start()
    time.sleep(10) # I am just allowing the sub-thread to run for 10 sec. You can listen on an event to stop execution.
    print('Thread stopped')
    break

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X