Я пытаюсь использовать модуль Pool
из multiprocessing
для параллельного вызова функции, и она не работает с этими ошибками. Поиск вокруг не дает мне понятия, как решить проблему. здесь - похожий вопрос без ответа.
Вот мой ответ:
Process ForkPoolWorker-1:
Traceback (most recent call last):
File "/usr/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/lib/python3.6/multiprocessing/process.py", line 93, in run
self._target(*self._args, **self._kwargs)
File "/usr/lib/python3.6/multiprocessing/pool.py", line 108, in worker
task = get()
File "/usr/lib/python3.6/multiprocessing/queues.py", line 337, in get
return _ForkingPickler.loads(res)
TypeError: __new__() missing 2 required positional arguments: 'tag' and 'attributes'
Process ForkPoolWorker-2:
Traceback (most recent call last):
File "/usr/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/lib/python3.6/multiprocessing/process.py", line 93, in run
self._target(*self._args, **self._kwargs)
File "/usr/lib/python3.6/multiprocessing/pool.py", line 108, in worker
task = get()
File "/usr/lib/python3.6/multiprocessing/queues.py", line 337, in get
return _ForkingPickler.loads(res)
TypeError: __new__() missing 2 required positional arguments: 'tag' and 'attributes'
То, что я делаю, просто. У меня есть список идентификаторов, которые я передавал функции, используя для l oop, и все работало нормально:
def do_the_job(self, id):
pass
# Process ID
# Add ID to a list
# Do a network activity related to id
def main(self):
for id in self.lst:
self.do_the_job(id)
И поскольку он не смог использовать все мои сетевые возможности, я изменил часть l oop, как показано ниже, после импорта Pool
из multiprocessing
, чтобы запустить его параллельно. Но это терпит неудачу, поскольку это поражает p.map(...)
с ошибками, сообщенными выше Есть ли способ диагностировать проблему?
def main(self):
with Pool(2) as p:
p.map(self.do_the_job, self.lst)