I have a script called jobrunner.py that calls class methods in main.py. See below...
# 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, args=("1",))
p1.start()
p2.start()
p1.join()
p2.join()
Processes _a and _b are invoked without any problems on OSX and Ubuntu but when I try to run the same thing on Windows (same version of python and all), it fails saying that index is out of range. This leads me to believe that the "global" variable BBOX is not being set or passed between modules on the Windows platform. Has anyone else seen something like this and know how to fix it?
Adam
UPDATE: I figured it out even though it might be a total hack...See below!
# 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,180,-90,90'
BBOX.append(world.split(','))
p1 = Process(target=_a, args=(BBOX[0],))
p2 = Process(target=_b, args=(BBOX[0],))
p1.start()
p2.start()
p1.join()
p2.join()
本文介绍了一个关于Python多进程环境下全局变量BBOX在不同操作系统(OSX、Ubuntu及Windows)间的传递问题。作者发现该变量在Windows平台上的表现异常,并通过修改代码解决了这一问题。文中提供了解决方案的具体实现。
1875

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



