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:
最新评论