Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用pool.map和list进行Python多处理_Python_Multiprocessing_Pool - Fatal编程技术网

使用pool.map和list进行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

我正在使用多处理来编写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个单独的进程(25872813216722700020964),即使只有4个cpu核

  • 我不明白为什么池在值为4时只启动1个进程,在值为8时启动5个单独的进程

  • 池对象是否可以实例化为大于CPU核心数的值

  • 另外,如果一个列表包含一百万条记录,那么在实例化池对象时应该使用的最佳值是什么

  • 我已经阅读了官方的python文档,但找不到相关信息。
    请帮忙

    让我们逐一回答

  • 我不明白为什么池在值为4时只启动1个进程,在值为8时启动5个单独的进程
  • 池启动了4个进程。不要把内核的数量误认为进程的数量,它是完全独立的。您有5个进程,因为最初的python进程也很重要。 因此,您从mainpython进程开始,它调用池来启动另外4个进程,这就是其中的5个。 如果您看到只使用了几个进程,这意味着它们可能能够足够快地终止任务,因此不需要其他进程

  • 池对象是否可以实例化为大于CPU核心数的值
  • 的确,您可以实例化任何您想要的数字(尽管根据操作系统可能有某种限制)。但请注意,这只会使您的CPU过载。更多解释如下

  • 另外,如果一个列表包含一百万条记录,那么在实例化池对象时应该使用的最佳值是什么
  • 好的,通常“最佳”情况是CPU的所有核心都被池充分利用。所以,如果你有4个核,4个进程将是最好的选择,尽管有时这并不完全是一个好的开始近似

    最后一点

    我已经阅读了官方的python文档,但找不到 信息


    这并不是python特有的,而是CS中的一般行为。

    让我们逐一回答

  • 我不明白为什么池在值为4时只启动1个进程,在值为8时启动5个单独的进程
  • 池启动了4个进程。不要把内核的数量误认为进程的数量,它是完全独立的。您有5个进程,因为最初的python进程也很重要。 因此,您从mainpython进程开始,它调用池来启动另外4个进程,这就是其中的5个。 如果您看到只使用了几个进程,这意味着它们可能能够足够快地终止任务,因此不需要其他进程

  • 池对象是否可以实例化为大于CPU核心数的值
  • 的确,您可以实例化任何您想要的数字(尽管根据操作系统可能有某种限制)。但请注意,这只会使您的CPU过载。更多解释如下

  • 另外,如果一个列表包含一百万条记录,那么在实例化池对象时应该使用的最佳值是什么
  • 好的,通常“最佳”情况是CPU的所有核心都被池充分利用。所以,如果你有4个核,4个进程将是最好的选择,尽管有时这并不完全是一个好的开始近似

    最后一点

    我已经阅读了官方的python文档,但找不到 信息


    这并不是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