Ошибка памяти с многопроцессорной обработкой Python pool.map - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть функция, которую я пытаюсь запустить параллельно. Я подозреваю, что где-то произошла утечка памяти, но я не уверен, как это исправить.

Сообщение об ошибке:

Exception in thread Thread-22:
Traceback (most recent call last):
  File "/home/ec2-user/anaconda3/envs/python3/lib/python3.6/threading.py", line 916, in _bootstrap_inner
    self.run()
  File "/home/ec2-user/anaconda3/envs/python3/lib/python3.6/threading.py", line 864, in run
    self._target(*self._args, **self._kwargs)
  File "/home/ec2-user/anaconda3/envs/python3/lib/python3.6/multiprocessing/pool.py", line 405, in _handle_workers
    pool._maintain_pool()
  File "/home/ec2-user/anaconda3/envs/python3/lib/python3.6/multiprocessing/pool.py", line 246, in _maintain_pool
    self._repopulate_pool()
  File "/home/ec2-user/anaconda3/envs/python3/lib/python3.6/multiprocessing/pool.py", line 239, in _repopulate_pool
    w.start()
  File "/home/ec2-user/anaconda3/envs/python3/lib/python3.6/multiprocessing/process.py", line 105, in start
    self._popen = self._Popen(self)
  File "/home/ec2-user/anaconda3/envs/python3/lib/python3.6/multiprocessing/context.py", line 277, in _Popen
    return Popen(process_obj)
  File "/home/ec2-user/anaconda3/envs/python3/lib/python3.6/multiprocessing/popen_fork.py", line 19, in __init__
    self._launch(process_obj)
  File "/home/ec2-user/anaconda3/envs/python3/lib/python3.6/multiprocessing/popen_fork.py", line 66, in _launch
    self.pid = os.fork()
OSError: [Errno 12] Cannot allocate memory

Как я использую многопроцессорность:

def main():
    with Pool(processes = 92) as p:
        p.map(mapVins, range(0, 33000))
        p.close()
        p.join()
if __name__ == '__main__':
    main()

Ошибка появляется один раз только для одного процесса, затем все процессы умирают, пока ядро ​​просто не зависнет. Также перед запуском функции обратите внимание, что у меня около 40 ГБ / 256 ГБ оперативной памяти.

...