关于python:新线程阻塞主线程

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()。

守护进程不能解决我的问题,因为我的问题是主线程在新线程启动后立即停止,而不是因为主线程执行结束。


如文所述,对Thread构造函数的调用是调用self.method2而不是引用它。用target=self.method2代替target=self.method2(),螺纹平行运行。

注意,由于gil的存在,CPU计算可能仍然会被序列化,这取决于线程所做的工作。


IIRC,这是因为在所有非守护进程线程都完成执行之前,程序不会退出。如果改为使用守护进程线程,它应该解决该问题。此答案提供了有关守护进程线程的更多详细信息:

守护进程线程说明