使用pool.map和list进行Python多处理
我正在使用多处理来编写python代码。下面是代码使用pool.map和list进行Python多处理,python,multiprocessing,pool,Python,Multiprocessing,Pool,我正在使用多处理来编写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}'.f
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个单独的进程(25872813216722700020964),即使只有4个cpu核
请帮忙让我们逐一回答
这并不是python特有的,而是CS中的一般行为。让我们逐一回答
这并不是python特有的,而是CS中的一般行为。感谢您的回复。那么如果值为4,所有cpu核心都会被利用吗?@sudhir,这取决于操作系统,但它应该被利用。当池对象以值4启动时,您提到了“池启动了4个进程”,但为什么我只看到1个进程id?它应该在每个核心上启动具有不同进程id的单独进程right@sudhir对它应该启动4个新进程进程进程id为1:26648进程id为2:26648进程id为3:26648进程id为4:26648进程id为5:26648进程id为6:26648进程id为7:26648进程id为8:26648进程id为9:26648进程id为10:26648感谢您的响应。那么如果值为4,所有cpu核心都会被利用吗?@sudhir,这取决于操作系统,但它应该被利用。当池对象以值4启动时,您提到了“池启动了4个进程”,但为什么我只看到1个进程id?它应该在每个核心上启动具有不同进程id的单独进程right@sudhir对它应该启动4个新进程进程进程id为1:26648进程id为2:26648进程id为3:26648进程id为4:26648进程id为5:26648进程id为6:26648进程id为7:26648进程id为8:26648进程id为9:26648进程id为10:26648