因为太多的博客并没有解决多进程问题,本文是自己学习后加入自己深入理解的总结记录,方便自己以后查看。
尝试了许多方式以及网上的资料发现调用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\\

最低0.47元/天 解锁文章
1790

被折叠的 条评论
为什么被折叠?



