擅长:python、mysql、java
<p>我能想到的最好方法是返回一个新的<code>Future</code>,并让第一个成功的函数调用给出一个结果:</p>
<pre><code>def scrape_trackers(self):
result = Future()
for tracker in self.torrent.trackers:
future = self.scrape_tracker(tracker)
future.add_done_callback(lambda f: self.tracker_done(f, result))
return result
def tracker_done(self, future, result_future):
if future.exception():
logging.warning('Tracker could not be scraped: %s', future.exception())
return
logging.info('Scraped tracker %s', future)
if self.unconnected_peers:
result_future.set_result(True)
</code></pre>