我的程序主线程中有一个mainloop(mainloop是一个等待磁盘I / O事件的DBusGMainLoop),每次调用一个事件处理程序时,都会为一些文件复制分配一个新线程。奇怪的事情发生在这一点上。假设调用了一个事件并启动了线程1 。 主题1 会阻止“return os.listdir(path)
”行,直到第二个事件发生,因此第二个主题启动。然后主题1 将继续正常工作但主题2 阻止。我还注意到,如果我通过Ctrl-C中断mainloop,两个线程都会工作,但很明显主线程将停止等待事件。
任何人都可以提供为何会发生这种情况的提示吗?
此代码在我的主要功能中运行:
mainloop = gobject.MainLoop()
mainloop.run()
这是事件处理程序启动新线程的地方:
agent = CopyingAgent(mount_point)
agent.start()
这就是线程似乎阻止或者其他东西的方法:
def sorted_listdir(self, path):
return sorted(os.listdir(path))