我在课堂上有以下代码:
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)
答案 0 :(得分:3)
您过早致电__persistDB
。最后使用target=self.__persistDB
但没有括号。当您包括括号时,您在进行线程调用之前调用函数。如果没有括号,则将该函数作为参数传递,以便稍后调用。
然后,您需要调用生成的Thread
对象的start
方法。这一切都在the documentation中描述,您应该阅读。
另外,不要在while True
循环中运行它。当您一次又一次地调用Thread
时,这将创建无数个线程。谷歌或搜索StackOverflow的“Python线程示例”,以找到使用threading
模块的正确方法的许多示例,例如here。