new thread blocks main thread
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | from threading import Thread class MyClass: #... def method2(self): while True: try: hashes = self.target.bssid.replace(':','') + '.pixie' text = open(hashes).read().splitlines() except IOError: time.sleep(5) continue # function goes on ... def method1(self): new_thread = Thread(target=self.method2()) new_thread.setDaemon(True) new_thread.start() # Main thread will stop there, wait until method 2 print"Its continues!" # wont show =( # function goes on ... |
可以这样做吗?在new_thread.start()主线程等待完成之后,为什么会发生这种情况?我没有在任何地方提供新的_thread.join()。
守护进程不能解决我的问题,因为我的问题是主线程在新线程启动后立即停止,而不是因为主线程执行结束。
如文所述,对
注意,由于gil的存在,CPU计算可能仍然会被序列化,这取决于线程所做的工作。
IIRC,这是因为在所有非守护进程线程都完成执行之前,程序不会退出。如果改为使用守护进程线程,它应该解决该问题。此答案提供了有关守护进程线程的更多详细信息:
守护进程线程说明