Я использую следующий многопроцессорный код:
manager = mp.Manager()
returns = manager.dict()
state = manager.dict()
pool = manager.Pool(processes=workers)
results = pool.starmap_async(extract_traces, [(
v,
path,
masks[v],
state,
returns,
max_frames,
False
) for v in videos
])
Он работает идеально, пока я не увеличу размер masks
, то есть массивов numpy. Затем метод starmap_asyn c выдает следующую ошибку:
.../signal_extraction.py", line 197, in parallel_extract_traces_from_videos
) for v in videos
File "<string>", line 2, in starmap_async
File "/home/eule/anaconda3/envs/detector/lib/python3.7/multiprocessing/managers.py", line
795, in _callmethod
conn.send((self._id, methodname, args, kwds))
File "/home/eule/anaconda3/envs/detector/lib/python3.7/multiprocessing/connection.py", line
206, in send
self._send_bytes(_ForkingPickler.dumps(obj))
File "/home/eule/anaconda3/envs/detector/lib/python3.7/multiprocessing/connection.py", line
393, in _send_bytes
header = struct.pack("!i", n)
struct.error: 'i' format requires -2147483648 <= number <= 2147483647
Я понимаю, что это связано с чем-то, не находящимся в диапазоне 32 бит, но я нигде не смог найти решение этой проблемы .
Также, когда я запускаю метод extract_traces
из простого для l oop, он отлично работает даже с большими массивами masks
. Есть ли какое-то ограничение для многопроцессорных процессов, которое я превышаю?