如何让以下工作?重点是我想异步运行一个方法(而不是一个函数)。
from multiprocessing import Pool
class Async:
def __init__(self, pool):
self.pool = pool
self.run()
def run(self):
p.apply_async(self.f, (10, ))
def f(self, x):
print x*x
if __name__ == '__main__':
p = Pool(5)
a = Async(p)
p.close()
p.join()
这不会打印任何内容。
答案 0 :(得分:1)
问题似乎是由于multiprocessing
需要挑选self.f
而绑定方法不可选择这一事实。讨论了如何解决问题here。
apply_async
显然会创建一个异常,将在未来返回。这就是为什么没有印刷的原因。如果将来执行get
,则会引发异常。
答案 1 :(得分:0)
它绝对有可能在python 2中使用线程池来线程类方法 - 以下程序完成了我所期望的。
#!/usr/bin/env python
from multiprocessing.pool import ThreadPool
class TestAsync():
def __init__(self):
pool = ThreadPool(processes = 2)
async_completions = []
for a in range(2):
async_completions.append(pool.apply_async(self.print_int, ( a,)))
for completion in async_completions:
res = completion.get()
print("res = %d" % res)
def print_int(self, value):
print(value)
return (value*10)
a = TestAsync()