Ron*_*hen 6 python python-multiprocessing
我正在使用Python多重处理将任务拆分为多个进程。我的CPU有4个物理核和8个虚拟核。我希望所有内核的利用率均为100%,但是当使用4个子进程池时,我在1个内核上观察到100%,在3个内核上观察到9%multiprocessing.Manager Namespace。子进程仅从共享名称空间读取(而不是写入)。也许共享的命名空间不允许并发读取访问-我是否需要以某种方式指定不应进行锁定?
在我的实际代码中,共享命名空间很大,包括大列表和numpy数组,因此另一个原因可能是创建它所需的时间。共享命名空间是只创建一次,还是每次创建新的子进程时都创建(假设命名空间中的数据没有变化)?
示例代码:
import multiprocessing
import worker
mgr = multiprocessing.Manager()
multiProcShared = mgr.Namespace()
multiProcShared.a = 25
multiProcShared.b = 40
multiProcShared.c = 10
pool = multiprocessing.Pool(4)
allResults = []
max = xrange(100)
for segmentNum in max:
allResults.append(pool.apply_async(worker.worker, args=(multiProcShared, segmentNum)))
Run Code Online (Sandbox Code Playgroud)
更新:我怀疑由于我正在将大数据传递给子进程,因此数据切换可能会产生大量开销。我认为数据是先腌制然后再腌制?如果是这样,那么python多处理性能是否会随着传递给子进程的数据大小而降低?是否根据数据是通过共享名称空间还是通过函数参数传递来更改?
| 归档时间: |
|
| 查看次数: |
726 次 |
| 最近记录: |