From python doc
concurrent.futures.as_completed(fs, timeout=None)¶
は、彼らが完了すると先物を生み出すFSによって与えられた未来のインスタンスの反復子 が(おそらく別のエグゼキュータ インスタンスが作成した)( を終え返します。またはキャンセルされた)。 as_completed() が呼び出される前に完了した先物が最初に返されます。 次()が呼び出された場合に返されるイテレータは TimeoutErrorを上昇させ、その結果がas_completedに元の通話から、タイムアウト秒後 は使用できません()。 timeoutはintまたはfloatにすることができます。 timeoutが指定されていないかNoneである場合は、 待ち時間に制限はありません。
あなたはexecutor.map()
とexecutor.submit()
の違いを理解する必要があります。最初の関数は、関数を引数のベクトルにマップします。それはmap
とかなり似ていますが、非同期にタスクを起動します。 submit(func, arg)
は、各コールで1つのタスクを起動します。このタスクではfunc
がarg
に適用されます。ここで
は私のpython 3上で実行することができsubmit()
とas_completed()
を使用するための一例です。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