我正在使用多进程处理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]
尽管只有4个CPU核心,但这会启动5个独立的进程(25872、8132、1672、27000、20964)。
当值为4时,我不明白为什么池只启动了1个进程,而值为8时却启动了5个独立的进程。
池对象是否可以用大于CPU核心数的值来实例化?
如果列表包含100万个记录,那么在实例化池对象时应该使用什么样的最佳值?
我已经查阅了官方的Python文档,但是没有找到相关信息。请帮忙解答。
result = p.map(square, mylist, chunksize=1)
。 - Netwave