Следующий пример не работает, если asynchronous
ключевое слово не используется в Localcluster
. Я хотел бы контролировать, сколько процессов/работников используется и обрабатывать функции параллельно, и распечатывать результаты по мере их готовности. Что нужно изменить?
import time
from dask.distributed import Client, LocalCluster, as_completed
def wait(sec):
time.sleep(sec)
return sec
def main():
cluster = LocalCluster(n_workers=2, ncores=2, asynchronous=True)
inputs = [5, 7, 3, 1]
client = Client(cluster)
futures = client.map(wait, inputs)
for future, result in as_completed(futures, with_results=True):
print(result)
client.close()
if __name__ == '__main__':
main()
Как вы полагаете, вы должны удалить asynchronous=
ключевое слово из вашего вызова LocalCluster. Это ключевое слово используется для поддержки асинхронных функций, например:
async def main():
cluster = await LocalCluster(n_workers=2, ncores=2, asynchronous=True)
inputs = [5, 7, 3, 1]
client = await Client(cluster, asynchronous=True)
futures = client.map(wait, inputs)
async for future, result in as_completed(futures, with_results=True):
print(result)
await client.close()
Если вы не хотите использовать синтаксис асинхронного ожидания (что относительно редко), вы должны игнорировать асинхронное ключевое слово. Вероятно, это не так, как вы думаете.
get_event_loop().run_until_complete(main())
и код заканчивается TimeoutError?