使用Dask在Python中进行异步编程

时间:2019-02-17 10:53:34

标签: python asynchronous celery dask nonblocking

有没有办法实现下面的示例?

import time

from celery import Celery

app = Celery('celery_blog', broker='redis://localhost:6379/0', backend='redis://localhost:6379/0')


@app.task
def sl():
    time.sleep(1)


if __name__ == "__main__":
    sleeper = sl.delay()
    print('submitted')
    print(f"sleeper done: {sleeper.ready()}")
    time.sleep(2)
    print(f"sleeper done: {sleeper.ready()}")

看着http://distributed.dask.org/en/latest/asynchronous.html,在我看来,所有示例都需要await后台任务才能开始执行,但是,等待块。另一方面,在用例中,它表示可以使用它代替Celery来实现非阻塞行为。我找不到的所有示例都未显示类似Celery的片段。我认为我缺少了至关重要的拼图。因此,如果您可以向我展示如何完成这项工作或将其指向有用的链接,我将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:0)

正如@mdurant在评论中所说,您可能正在寻找Dask的期货接口。参见this article

from dask.distributed import Client
client = Client()

future = client.submit(function, *args, **kwargs)
future.result()  # block then get result