Python for .NET事件处理程序是否在工作线程中执行

时间:2013-08-28 20:27:34

标签: python-multithreading python.net

我有一个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,started 8920)>}

如何判断给定的Python行正在执行什么线程?

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

  

< _MainThread(MainThread,7064开始)>

在我的处理程序中,它返回

  

< _DummyThread(Dummy-1,启动后台程序7916)>

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

感谢。

1 个答案:

答案 0 :(得分:1)

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

threading.enumerate()

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