【发布时间】:2019-05-30 08:28:36
【问题描述】:
我正在使用多处理处理 Python 代码。下面是代码
import multiprocessing
import os
def square(n):
#logger.info("Worker process id for {0}: {1}".format(n, os.getpid()))
logger.info("Evaluating square of the number {0}".format(n))
print('process id of {0}: {1}'.format(n,os.getpid()))
return (n * n)
if __name__ == "__main__":
# input list
mylist = [1, 2, 3, 4, 5,6,7,8,9,10]
# creating a pool object
p = multiprocessing.Pool(4)
# map list to target function
result = p.map(square, mylist)
print(result)
我的服务器中的 CPU 核心数是 4。如果我使用 4,则只会启动单个进程。一般来说,它应该启动 4 个独立的进程,对吧?
如果我在下面的 Pool 对象中将值设置为 8 是我得到的响应
process id of 1: 25872
process id of 2: 8132
process id of 3: 1672
process id of 4: 27000
process id of 6: 25872
process id of 5: 20964
process id of 9: 25872
process id of 8: 1672
process id of 7: 8132
process id of 10: 27000
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
这启动了 5 个独立的进程 (25872,8132,1672,27000,20964),即使只有 4 个 cpu 核心。
我不明白为什么池在值为 4 时只启动了 1 个进程,而在值为 8 时启动了 5 个单独的进程。
可以使用大于 CPU 内核数的值来实例化池对象吗?
如果列表包含一百万条记录,那么在实例化池对象时我们应该使用的最佳值应该是多少?
我浏览过官方 python 文档,但找不到信息。 请帮忙
【问题讨论】:
标签: python multiprocessing pool