私は、Python 3.4
から、スレッドのさまざまなサブスレッドを起動するプログラムThread
を起動しています。Python:Kill Thread
私はメインスレッドを終了し、再度起動したいと思います。
これは非常に難しい作業です。誰かがThread
の代わりにmultiprocessing.Process
とProcess.terminate()
を使用することを提案する前に、私の実際のプログラムはすべてのスレッドとサブスレッドと共通の共有を共有しなければならないため、このルートには行くことができません。
現在、私はそれがsys.exit()
を使用して終了する必要があることをメインスレッドに知らせるためにQueue
を使用していますが、あなたは以下を参照することができますので、これは、動作しません。代わりにos._exit(0)
を試しましたが、それはインタープリタ全体を殺します。
STARTING
1...
2...
1...
2...
2...
1...
1...
2...
2...
1...
KILLING
EXITING THREAD
2...
1...
1...
2...
2...
1...
2...
1...
STARTING
2...
1...
2...
1...
2...
1...
2...
1...
2...
1...
1...
2...
1...
2...
1...
私は終了し、再度起動し、すべてのサブスレッドを含め、メインスレッドをしたい:
import sys
import time
from threading import Thread
from queue import Queue
t = None
q = None
def subthread1():
while True:
time.sleep(2)
print(' 1...')
def subthread2():
while True:
time.sleep(2)
print(' 2...')
def main_thread(q):
t1 = Thread(target=subthread1)
t1.daemon = True
t1.start()
t2 = Thread(target=subthread2)
t2.daemon = True
t2.start()
while True:
msg = q.get()
if msg == 0:
print("EXITING THREAD")
sys.exit()
def start():
print("STARTING")
global q, t
q = Queue()
t = Thread(target=main_thread, args=(q,))
t.start()
def kill():
print("KILLING")
global q, t
q.put(0)
def main():
start()
time.sleep(10)
kill()
time.sleep(10)
start()
if __name__ == '__main__':
main()
これは、出力が生成されます。どうすればこれを達成できますか?私の実際のプログラムでは、サブスレッドにはサブスレッド(すべてのデーモン)があります。どのような助けが大いに感謝!
作品!素晴らしい簡単な解決策 – baconwichsand