Я изменил код, и теперь он, кажется, делает то, что я хочу. Теперь я понимаю, что это не выходит из контекста, пока все не закончится
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()