Предположим, у меня есть две независимые функции.Я хотел бы вызывать их одновременно, используя Python concurrent.futures.ThreadPoolExecutor
.Есть ли способ вызвать их с помощью Executor
и убедиться, что они возвращаются в порядке их отправки?
Я понимаю, что это возможно с Executor.map
, но я хочу распараллелить две отдельные функции, а неодна функция с целочисленным вводом.
У меня есть пример кода ниже, но он не гарантирует, что fn_a
вернется первым (в силу конструкции wait
).
from concurrent.futures import ThreadPoolExecutor, wait
import time
def fn_a():
t_sleep = 0.5
print("fn_a: Wait {} seconds".format(t_sleep))
time.sleep(t_sleep)
ret = t_sleep * 5 # Do unique work
return "fn_a: return {}".format(ret)
def fn_b():
t_sleep = 1.0
print("fn_b: Wait {} seconds".format(t_sleep))
time.sleep(t_sleep)
ret = t_sleep * 10 # Do unique work
return "fn_b: return {}".format(ret)
if __name__ == "__main__":
with ThreadPoolExecutor() as executor:
futures = []
futures.append(executor.submit(fn_a))
futures.append(executor.submit(fn_b))
complete_futures, incomplete_futures = wait(futures)
for f in complete_futures:
print(f.result())
Мне также интересно узнать, есть ли способ сделать это с joblib