簡體   English   中英

Python 多處理:如何添加或更改池中的進程數

[英]Python Multiprocessing: How to add or change number of processes in a pool

我已經從 python 多處理模塊創建了一個池,並想更改池中正在運行的進程數或將其添加到其中。 這可能嗎? 我試過這樣的事情(我的代碼的簡化版本)

class foo:
    def __init__():
        self.pool = Pool()
    def bar(self, x):
        self.pool.processes = x
        return self.pool.map(somefunction, list_of_args)

它似乎有效並最終實現了我想要的結果(即在多個進程之間拆分工作)但我不確定這是最好的方法,或者它為什么有效。

我認為這實際上行不通:

import multiprocessing, time

def fn(x):
    print "running for", x
    time.sleep(5)

if __name__ == "__main__":
    pool = multiprocessing.Pool()
    pool.processes = 2

    # runs with number of cores available (8 on my machine)
    pool.map(fn, range(10))

    # still runs with number of cores available, not 10
    pool.processes = 10
    pool.map(fn, range(10))

multiprocessing.Pool將進程數存儲在私有變量(即Pool._processes )中,該變量是在實例化 Pool 時設置的。 查看源代碼

這似乎有效的原因是因為進程數自動設置為當前機器上的核心數,除非您指定不同的數字。

我不確定您為什么要更改可用進程的數量——也許您可以更詳細地解釋一下。 盡管您可以隨時創建一個新池(大概是在其他池完成運行之后),但創建一個新池非常容易。

您可以使用私有變量_processes和私有方法_repopulate_pool 但我不建議使用私有變量等。

pool = multiprocessing.Pool(processes=1, initializer=start_process)
>Starting ForkPoolWorker-35

pool._processes = 3
pool._repopulate_pool()
>Starting ForkPoolWorker-36
>Starting ForkPoolWorker-37

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM