<p>查看代码<a href="https://github.com/python/cpython/blob/3.5/Lib/concurrent/futures/process.py#L437-L456" rel="nofollow">ProcessPoolExecutor.submit()</a>和<a href="https://github.com/python/cpython/blob/3.5/Lib/concurrent/futures/thread.py#L104-L114" rel="nofollow">ThreadPollExecutor.submit()</a>,<code>Excutor.submit()</code>返回一个Future实例,它在<a href="https://github.com/python/cpython/blob/3.5/Lib/concurrent/futures/_base.py#L282" rel="nofollow">^{<cd2>}</a>中定义。在</p>
<p>所以,诀窍来了。您可以子类化并替换原来的Future,然后在子类中添加自定义方法。在</p>
<p>这是可行的,但不推荐。为此,最好使用组合而不是继承。在<a href="http://learnpythonthehardway.org/book/ex44.html" rel="nofollow">Learn Python the Hard Way</a>中有一个关于继承和组合的好章节</p>
<p>回到问题上来,下面是一个作文示例:
在</p>
<pre><code>class Myclass(object):
def __init__(self, workers=3):
self.executor = concurrent.futures.ProcessPoolExcutor(workers)
def run(self, job):
'''Job to be run in a Executor'''
def submit(self, jobs):
self.futures = [executor.submit(self, foo, job) for job in jobs]
def done(self, result):
'''Dealing with the result'''
def harvest(self):
for my_future in concurrent.futures.as_completed(self.futures):
self.done(my_future.result())
</code></pre>
<p>然后您可以将<code>MyClass</code>子类化并实现不同的done方法。在</p>