簡體   English   中英

futures.wait 在 python3.7 的 concurrent.futures 中不會超時

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM