Python Multiprocess diff between Windows and Linux

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() 

The _a and _b processes are called without any problems on OSX and Ubuntu, but when I try to run the same thing on Windows (the same version of python and that's it), it does not mean that the index is out of range. This makes me think that the "global" BBOX variable is not set or passed between modules on the Windows platform. Has anyone else seen something like this and knows how to fix it?

Adam

UPDATE: I figured this out, although it could be a common 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() 
+6
source share
1 answer

You should not expect that the values โ€‹โ€‹of global variables that you set in the parent process will be automatically passed to the child processes.

Your code runs on Unix-like platforms, because fork() used on these multiprocessing platforms. This means that each child process receives a copy of the address space of the parent process, including all global variables.

This does not apply to Windows; each variable from the parent process to which the child must have access must be explicitly transferred or placed into shared memory .

Once you do this, your code will work on both Unix and Windows.

+12
source

Source: https://habr.com/ru/post/892136/


All Articles