From python doc
concurrent.futures.as_completed(fs, timeout=None)¶
返回一個迭代 了由產生期貨作爲他們完成(完成 FS給未來的情況下(可能由不同的執行者創造 實例)或被取消)。在as_completed() 之前完成的任何期貨將首先被取消。返回的迭代器引發一個 TimeoutError,如果接下來()被調用,並且在原始調用到as_completed()的超時秒數後結果不可用 。 超時可以是一個int或float。如果沒有指定超時或無, 等待時間沒有限制。
您需要了解executor.map()
和executor.submit()
之間的差異。第一個將一個函數映射到一個參數向量。它與map
非常相似,但異步啓動任務。每次通話時,submit(func, arg)
啓動一項任務。在此任務中,應用func
。
這是一個使用as_completed()
和submit()
的例子,我可以在python 3上運行。0
from concurrent import futures
import urllib.request
URLS = ['http://www.foxnews.com/',
'http://www.cnn.com/',
'http://europe.wsj.com/',
'http://www.bbc.co.uk/',
'http://some-made-up-domain.com/']
def load_url(url, timeout):
return urllib.request.urlopen(url, timeout=timeout).read()
def main():
with futures.ThreadPoolExecutor(max_workers=5) as executor:
future_to_url = dict(
(executor.submit(load_url, url, 60), url)
for url in URLS)
for future in futures.as_completed(future_to_url):
url = future_to_url[future]
try:
print('%r page is %d bytes' % (
url, len(future.result())))
except Exception as e:
print('%r generated an exception: %s' % (
url, e))
if __name__ == '__main__':
main()
沒有map()
用在這裏,任務與submit
運行和as_completed()
返回了能產生 期貨作爲他們完成FS給出的未來實例的迭代器(成品或已取消) 。
你很幸運! – damzam 2013-05-02 04:40:41