栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用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,并且非常轻巧。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/596477.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号