Mam skrypt o nazwie jobrunner.py, który wywołuje metody klasy w pliku main.py. Zobacz poniżej ...Python Multiprocess diff między Windows i Linux
# 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()
Procesy _a i _B są wywoływane bez żadnych problemów na OSX i Ubuntu, ale gdy próbuję uruchomić to samo na Windows (tę samą wersję Python i wszystkich), to nie mówią, że indeks jest poza zakresem. To prowadzi mnie do przekonania, że "globalna" zmienna BBOX nie jest ustawiana lub przekazywana między modułami na platformie Windows. Czy ktoś jeszcze widział coś takiego i wiedział, jak to naprawić?
Adam
UPDATE: I zorientowaliśmy się, mimo to może być całkowity siekać ... Zobacz poniżej!
# 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()
Dzięki, że to naprawdę doprowadza mnie do właściwego kierunku, jednak muszę przekazać listę do pamięci współdzielonej. W tym przypadku będzie to coś takiego jak ta lista: [['57', '78', '23', '40']], które ustawiam jako BBOX. Nie ma c_type dla listy? – aeupinhere