1

我有一个 Python for .Net (2.7) 脚本,它订阅了在 .NET 程序集中定义的事件。当该事件触发并调用基于 python 的事件处理程序时,我的处理程序是在 Python 的主线程还是在工作线程中执行?

...
def MyEventHandler(source, args):
    print 'Received message: ' + args.Message
...
dotNetObject.SomeEvent += MyEventHandler
...

我认为它一定是一个工作线程,但是当我将这行代码放入处理程序时:

print threading._active

它只报告了主线程:

{8920: <_MainThread(MainThread, 开始 8920)>}

如何判断给定的 Python 行在哪个线程中执行?

更新:好的,我找到了 threading.current_thread()。在我的处理程序之外它返回:

<_MainThread(MainThread, 开始 7064)>

在我的处理程序中它返回

<_DummyThread(Dummy-1, 启动守护进程 7916)>

那么“DummyThread”是工作线程吗?为什么它没有出现在 threading._active 中?

谢谢。

4

1 回答 1

1

DummyThreads 是工作线程,并显示在此调用中:

threading.enumerate()

所以,是的,事件处理程序正在工作线程中执行。

于 2013-08-28T21:39:15.933 回答