C#使用Pythonnet调用pthon程序之多进程创建方法及依赖问题处理

因为太多的博客并没有解决多进程问题,本文是自己学习后加入自己深入理解的总结记录,方便自己以后查看。

尝试了许多方式以及网上的资料发现调用pthon脚本不能创建multiprocessing的进程的原因以及解决方案,在下面的内容中写出,如果哪位大佬有解决方案请留言


1、C#调用pythonnet在python中开进程报错内容:



['  File "D:\\AllLargeProject\\Visontool\\Linux\\VisionTool_PY\\testxbb1111.py", line 19, in test2\n    project = pickle.load(open(\'D:\\AllLargeProject\\Visontool\\project3.vtpro\', \'rb\'))\n', '  File "D:\\AllLargeProject\\Visontool\\Linux\\VisionTool_PY\\visiontool\\core\\project.py", line 141, in __setstate__\n    self._shared_memory = DataManager()\n', '  File "D:\\AllLargeProject\\Visontool\\Linux\\VisionTool_PY\\visiontool\\core\\datashared.py", line 251, in __init__\n    self._manager = multiprocessing.Manager()\n', '  File "C:\\Users\\xbb1995\\anaconda3\\envs\\visiontool\\Lib\\multiprocessing\\context.py", line 56, in Manager\n    m.start()\n', '  File "C:\\Users\\xbb1995\\anaconda3\\envs\\visiontool\\Lib\\multiprocessing\\managers.py", line 513, in start\n    self._process.start()\n', '  File "C:\\Users\\xbb1995\\anaconda3\\envs\\visiontool\\Lib\\multiprocessing\\process.py", line 105, in start\n    self._popen = self._Popen(self)\n', '  File "C:\\Users\\xbb1995\\anaconda3\\envs\\visiontool\\Lib\\multiprocessing\\context.py", line 322, in _Popen\n    return Popen(process_obj)\n', '  File "C:\\Users\\xbb1995\\anaconda3\\envs\\visiontool\\Lib\\multiprocessing\\popen_spawn_win32.py", line 48, in __init__\n    None, None, False, 0, None, None, None)\n']   在 Python.Runtime.PyObject.Invoke(PyTuple args, PyDict kw)

原因:
- 我们使用pythonnet调用时,是已经在C#开启的程序入口中的主进程或子进程中运行python脚本,无法开启python程序的 if name ==‘main’: 程序入口,要实现python 的多进程和多线程,if name ==‘main的程序入口这个功能不可或缺,所以导致不能开启多进程和多线程

解决方法:
- 1、先利用序列化和反序列化pickle来封装自己项目文件,在C#中利用pickle来反序列化我们的项目使项目在初始化时直接进__setstate__(self,state)函数来更新项目中的参数,使项目的入口setstate来做程序的入口调用项目
- 2、在进程中添加recover(),在share memory中设定进程开启标志,通过标志来分享内存


2、C#调用pythonnet在python中的其他与程序依赖库相关报错记录


['  File "D:\\AllLargeProject\\

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值