【发布时间】:2020-05-28 13:04:48
【问题描述】:
我正在尝试使用多处理模块在 python 3.8.0 中创建一个子进程,而不继承父进程的内存。我为此使用了 spawn start 方法mp.set_start_method('spawn')。但是子进程的内存使用和父进程几乎一样。代码如下:sn-ps
我正在使用此处共享的代码来测试How can I restrict the scope of a multiprocessing process?
memtest.py
import multiprocessing as mp
import numpy as np
def foo(x):
import time
time.sleep(60)
if __name__ == "__main__":
mp.set_start_method('spawn')
dont_inherit = np.ones((500, 100))
for x in range(3):
mp.Process(target=foo, args=(x,)).start()
使用python3 memtest.py 运行
内存使用情况
449m 28m 14m S 0.0 0.2 0:00.44 python3 memtest.py
34904 10m 5816 S 0.0 0.1 0:00.03 /srv/env/bin/python3 -c from multiprocessing.resource_tracker import main;main(5)
252m 26m 13m S 0.0 0.2 0:00.26 /srv/env/bin/python3 -c from multiprocessing.spawn import spawn_main; spawn_main(tracker_fd=6, pipe_handle=20) --multiprocessing-fork
252m 27m 13m S 0.0 0.2 0:00.21 /srv/env/bin/python3 -c from multiprocessing.spawn import spawn_main; spawn_main(tracker_fd=6, pipe_handle=22) --multiprocessing-fork
252m 26m 13m S 0.0 0.2 0:00.23 /srv/env/bin/python3 -c from multiprocessing.spawn import spawn_main; spawn_main(tracker_fd=6, pipe_handle=24) --multiprocessing-fork
我在 ubuntu18.04 上使用带有 python3.8.0 的 virtualenv
$ python3 --version
Python 3.8.0
这种创建子进程的方法有什么问题?我需要创建很多需要轻量级的子进程,我最初认为使用 mp 的 spawn 方法可以做到这一点,但它似乎不起作用。
【问题讨论】:
标签: python-3.x multiprocessing python-multiprocessing ubuntu-18.04 spawn