[英]futures.wait does not timeout in concurrent.futures in python3.7
我有以下代碼
def multiprocess(dbs, tables, timeout=None):
"""
Run all the processes for each table at the same time
:param dbs: list of database objects
:param tables: list: tables to work on
:param timeout: timeout time
:return: list of results
"""
# Sort the source
results = []
with ThreadPoolExecutor(max_workers=30) as thread:
jobs = {thread.submit(procedure, db, table) for db in dbs for table in tables}
done, running = futures.wait(jobs, timeout=1, return_when=futures.ALL_COMPLETED)
for job in jobs:
if job.done():
results.append(job.result())
return results
問題是超時永遠不會發生。 它僅在全部完成后返回。 我應該做什么?
我更改了代碼,現在它似乎在做我想做的事。 我現在明白它不會離開上下文直到一切都完成
def multiprocess(dbs, tables, timeout=0):
"""
Run all the processes for each table at the same time
:param dbs: list of database objects
:param tables: list: tables to work on
:param timeout: timeout time
:return: list of results
"""
with ThreadPoolExecutor(max_workers=20) as thread:
jobs = {thread.submit(procedure, db, table) for db in dbs for table in tables}
done, not_done = futures.wait(jobs, timeout=timeout)
print(f"Done {done}")
for job in done:
yield job.result()
print(f"Not Done {not_done}")
for job in not_done:
yield job.result()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.