IronPython报错‘No module named threading’的原因及解决方法
解决IronPython在.NET控制台项目中使用多线程的
threading模块导入错误问题 我最近在.NET平台的C#控制台应用项目里,尝试用IronPython实现多线程功能时踩了个实打实的坑——已经添加了Python和IronPython的引用,但运行基于标准Pythonthreading模块写的代码时,直接抛出了IronPython.Runtime.Exceptions.ImportException: 'No module named threading'的错误。我搜了半天想找需要额外添加的引用,结果一无所获,后来才搞明白问题的核心:IronPython并不支持标准Python的threading模块,得改用.NET原生的System.Threading相关类来实现多线程逻辑。
下面是我修正前后的代码对比,供同样踩坑的朋友参考:
原代码(报错版本)
import threading from threading import Thread def PaymentCalculation(userid): sum = 1+1 return sum def ProcessingData(): data = GetAssigneeData() #will return dataset from DB for member in data.Tables[0].Rows: pthread = Thread(target=PaymentCalculation, args=(member["UserId"],)) pthread.start()
修正后代码(正常运行版本)
from System.Threading import ( ApartmentState, Thread, ThreadStart,ParameterizedThreadStart ) def PaymentCalculation(userid): sum = 1+1 return sum def ProcessingData(): data = GetAssigneeData() for member in data.Tables[0].Rows: thread = Thread(ParameterizedThreadStart(PaymentCalculation)) thread.SetApartmentState(ApartmentState.STA) thread.Start(member["UserId"])
核心改动就是放弃标准Python的threading模块,转而导入.NET的System.Threading命名空间下的类,用ParameterizedThreadStart来绑定带参数的线程执行方法,并且根据需求设置线程的ApartmentState(示例中设置为STA),最后调用Start方法传入参数启动线程即可。
内容的提问来源于stack exchange,提问作者Sajith A.K.
相关产品推荐
相关产品推荐

