Python - os.listdir上的阻塞线程

时间:2013-01-29 16:45:39

标签: python multithreading block dbus gobject

我的程序主线程中有一个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))

0 个答案:

没有答案