IronPython 的 .NET 线程

IronPython 除了实现 Python 的 threading 接口,也包括了 .NET 线程接口。如果不考虑跨平台移植的话,.NET 的接口应该是更为好用,也更强大些.

IronPython 线程开发最权威同时也是最简洁的介绍,就是 Michael Foord 大神的 http://www.voidspace.org.uk/ironpython/threading.shtml。剩下的就去研究 MSDN 上的 System.Threading 吧

我模拟了一个 start_new_thread 实现如下:

from System.Threading import Thread, ParameterizedThreadStart

def start_new_thread(func, args, kwargs=None):
def thread_func(obj):
f = obj[0]
a = obj[1]
k = obj[2]
if not k:
return f(*a)
else:
return f(*a, **k)
t = Thread(ParameterizedThreadStart(thread_func))
t.Start((func, args, kwargs))
return t

使用 .NET 线程要注意,Thread.Abort() 方法无法中断非托管代码,比如一个阻塞的 socket 调用。线程会一直停留在 AbortRequested 状态下,而不去抛 ThreadAbortException 异常.

Topic: 技术