您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用Python,Flask和Celery的并发异步进程

使用Python,Flask和Celery的并发异步进程

您应该更改代码,以便工作人员可以并行工作:

@myapp.route('/foo')
def bar():
    # start tasks
    task_1 = a_long_process.delay(x, y)
    task_2 = another_long_process.delay(x, y)
    task_3 = yet_another_long_process.delay(x, y)
    # fetch results
    try:
        task_1_result = task_1.get(timeout=1)
        task_2_result = task_2.get(timeout=1)
        task_3_result = task_3.get(timeout=1)
    except TimeoutError:
        # Handle this or don't specify a timeout.
        raise
    # combine results
    return task_1 + task_2 + task_3

代码将阻塞,直到所有结果可用(或达到超时)为止。

在执行过程中,Flask应用程序是否会被阻止?

代码将仅阻止WSGI容器的一名工作人员。整个站点是否没有响应取决于您使用的WSGI容器。(例如Apache + mod_wsgi,uWSGI,gunicorn等)。大多数WSGI容器产生多个工作程序,因此在您的代码等待任务结果时,只会阻止一个工作程序。

对于这种应用程序,我建议使用gevent,它会为每个请求生成一个单独的greenlet,并且非常轻巧。

Python 2022/1/1 18:36:18 有230人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶