0

我在课堂上有以下代码:

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)
4

1 回答 1

3

你打电话__persistDB太快了。最后不带括号使用target=self.__persistDB。当您包含括号时,您是在进行线程调用之前调用该函数。如果没有括号,则将函数作为参数传递,以便稍后调用。

然后,您将需要调用生成Thread的对象的start方法。这一切都在您应该阅读的文档中进行了描述。

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

于 2013-09-03T17:35:27.573 回答