创建_really_并行运行的新线程

时间:2013-09-03 17:33:52

标签: python multithreading blocking

我在课堂上有以下代码:

def persistDBThread(self):
    while True:
        Thread(target=self.__persistDB)
        time.sleep(10)

def  __persistDB(self):
    with open(self.authDBPath, 'w') as outfile:
        json.dump(self.authDB, outfile)

线程在__ main__中启动但是一旦我启动这个线程,它实际上就是在主执行中阻塞了。

这是为什么?我知道GIL - 它都在同一个过程中。任务切换在微线程的同一进程中发生,但为什么不切换回来?

谢谢!

对不起甚至问:

def persistDBThread(self):
    Thread(target=self.__persistDB).start()


def  __persistDB(self):
    while True:
        time.sleep(10)
        outfile = open(self.authDBPath, 'w')
        json.dump(self.authDB, outfile)

1 个答案:

答案 0 :(得分:3)

您过早致电__persistDB。最后使用target=self.__persistDB但没有括号。当您包括括号时,您在进行线程调用之前调用函数。如果没有括号,则将该函数作为参数传递,以便稍后调用。

然后,您需要调用生成的Thread对象的start方法。这一切都在the documentation中描述,您应该阅读。

另外,不要在while True循环中运行它。当您一次又一次地调用Thread时,这将创建无数个线程。谷歌或搜索StackOverflow的“Python线程示例”,以找到使用threading模块的正确方法的许多示例,例如here