У меня есть функция, которую я пытаюсь запустить параллельно. Я подозреваю, что где-то произошла утечка памяти, но я не уверен, как это исправить.
Сообщение об ошибке:
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 ГБ оперативной памяти.