Windows和Linux之间的Python Multiprocess差异
发布时间:2020-12-14 04:19:33 所属栏目:Windows 来源:网络整理
导读:我有一个名为jobrunner.py的脚本,它调用main.py中的类方法.见下文… # jobrunner.pyfrom multiprocessing import Processimport mainfrom main import BBOXdef _a(arg): f = main.a() print f.run()def _b(arg): p = main.b() print p.run()if __name__ == '
我有一个名为jobrunner.py的脚本,它调用main.py中的类方法.见下文…
# jobrunner.py from multiprocessing import Process import main from main import BBOX def _a(arg): f = main.a() print f.run() def _b(arg): p = main.b() print p.run() if __name__ == '__main__': world = '-180,180,-90,90' BBOX.append(world.split(',')) p1 = Process(target=_a,args=("1",)) p2 = Process(target=_b,)) p1.start() p2.start() p1.join() p2.join() 在OSX和Ubuntu上调用进程_a和_b没有任何问题,但是当我尝试在Windows上运行相同的东西(相同版本的python和all)时,它无法说索引超出范围.这让我相信在Windows平台上的模块之间没有设置或传递“全局”变量BBOX.有没有其他人看到这样的东西,知道如??何解决它? 亚当 更新:虽然它可能是一个彻底的黑客,但我想出来了……见下文! # jobrunner.py from multiprocessing import Process import main from main import BBOX def _a(arg): BBOX.append(arg) #This is the key f = main.a() print f.run() def _b(arg): BBOX.append(arg) #This is the key p = main.b() print p.run() if __name__ == '__main__': world = '-180,args=(BBOX[0],)) p1.start() p2.start() p1.join() p2.join()
您不应期望在父进程中设置的全局变量的值会自动传播到子进程.
您的代码恰好在类Unix平台上运行,因为在这些平台上,多处理使用 在Windows上不是这种情况;来自父进程的每个需要由子进程访问的变量必须明确为passed down or placed in shared memory. 完成此操作后,您的代码将在Unix和Windows上运行. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- .net – 在Windows上生成ActivityTracing事件日志
- windows-8 – 如何访问特定的resw资源文件
- 是否可以在Windows Azure中查看项目文件?
- 单行与多个命令使用Windows批处理文件
- windows – 64位类似Scintilla的文本编辑组件?
- windows-8 – 在Visual Studio Simulator for Windows 8 Ap
- uwp – 资源的冲突值
- get-event-store – Windows Azure上的事件存储无法从外部访
- windows – 为什么单击子窗口并不总是将应用程序带到前台?
- Windows 7 – Windows 7批处理文件:如何检查参数是否已传递