Python 进程池在面向对象过程中,进程池无法调用实例方法

2018-05-08 21:48:14 +08:00
 noobpythoner

下列代码中,func 函数无法被 pool.apply_async 调用,这是什么情况?

import time
from multiprocessing.pool import Pool


class Test:
    def __init__(self):
        self.pool = Pool(5)

    def func(self):
        time.sleep(0.2)
        print("1")

    def run(self):
        for i in range(10):
            self.pool.apply_async(self.func)  # 这里的 func 为什么不能进入执行?

        time.sleep(3)
        self.pool.close()
        self.pool.join()


if __name__ == '__main__':
    t = Test()
    t.run()

3881 次点击
所在节点    Python
2 条回复
Rob007
2018-05-08 22:45:27 +08:00
justou
2018-05-08 22:48:44 +08:00
你把 func 改成 staticmethod 试试;

再试试改成这样报什么错:

import time
from multiprocessing.pool import Pool

class Test:
def __init__(self):
self.pool = Pool(5)

def func(self):
time.sleep(0.2)
print("1")
return 1

def run(self):
results = [self.pool.apply_async(self.func) for _ in range(10)]
for res in results:
print(res.get())

time.sleep(3)
self.pool.close()
self.pool.join()


if __name__ == '__main__':
t = Test()
t.run()

再搜索下可能就很多收获了:)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/453232

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX