簡體   English   中英

多處理池卡住

[英]Multiprocessing Pool getting stuck

我對多處理沒有太多經驗,但到目前為止它似乎討厭我。 我正在嘗試運行最簡單的示例,但它卡住了,我必須重新啟動我的 kernel。

我的例子:

import multiprocessing as mp

aa = [x for x in range(3,16)]

def f(x):
    return x**2

if __name__ == '__main__':
    with mp.Pool(processes = 4) as p:
        res = p.map(f, aa)

print(res)

在我嘗試使用 class 方法和pool.map()內部的屬性之前,它工作得很好。 我認為在我嘗試執行此操作后它壞了:

class clasy():
    def __init__(self, a, b):
        self.a = a
        self.b = b

    def gen(self):
        for i in range(self.a, self.b):
            yield i

    def dodo(self):
        gg = gen()
        with mp.Pool() as pool:
            self.res = pool.map(f, gg)
        return self.res

paralel = clasy(3,16)
print(paralel.dodo())

出了什么問題,可以修復嗎?

此外,是否可以在 pool.map() 內部使用 class 方法生成生成器,是否可以在 class 內部使用。 或者池 function 和迭代器應該是頂級對象嗎?

您需要將 function f傳遞給clasy或將其作為 class 的實例。 例如,以下應該有效:

class clasy():
    def __init__(self, a, b):
        self.a = a
        self.b = b

    def gen(self):
        for i in range(self.a, self.b):
            yield i

    def f(self, x):
        return x**2

    def dodo(self):
        gg = self.gen()
        with mp.Pool(processes = 4) as pool:
            self.res = pool.map(self.f, gg)
        return self.res

paralel = clasy(3,16)
print(paralel.dodo())

Out[1]:
[9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225]

暫無
暫無

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

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