当前位置

IronPython 的 .NET 线程

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

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

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

  1. from System.Threading import Thread, ParameterizedThreadStart
  2.  
  3. def start_new_thread(func, args, kwargs=None):
  4.     def thread_func(obj):
  5.         f = obj[0]
  6.         a = obj[1]
  7.         k = obj[2]
  8.         if not k:
  9.             return f(*a)
  10.         else:
  11.             return f(*a, **k)
  12.     t = Thread(ParameterizedThreadStart(thread_func))
  13.     t.Start((func, args, kwargs))
  14.     return t

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

Topic: