新线程阻塞主线程

时间:2015-06-08 05:46:59

标签: python multithreading

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()主线程等待它完成之后,为什么会发生这种情况?我没有在任何地方提供new_thread.join()。

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

2 个答案:

答案 0 :(得分:11)

如上所述,对Thread构造函数的调用是调用 self.method2而不是引用它。将target=self.method2()替换为target=self.method2,线程将并行运行。

请注意,根据您的线程执行的操作,由于the GIL,CPU计算可能仍会被序列化。

答案 1 :(得分:0)

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

Daemon Threads Explanation