python - flask 中长时间运行的作业

标签 python celery python-multithreading

我创建了一个模块来执行一些繁重的计算,并返回一些数据以存储在 nosql 数据库中。计算过程是通过我的 flask 应用程序中的发布请求启动的。 flask 函数将执行计算代码,代码之后返回的结果将存储在 db 中。我在想 celery 。但我想知道并且没有找到任何明确的信息,如果可以使用 python trheading E.g

from mysci_module import heavy_compute


@route('/initiate_task/', methods=['POST',])
def run_computation():
    import thread
    thread.start_new_thread(heavy_compute, post_data)

    return reponse

我知道它非常抽象。我在这个方法中看到的唯一问题是我的函数必须知道并负责在数据库中存储数据,所以它不是很独立于所使用的数据库。正确的?为什么 Celery 比上面的方法更好(真的吗?)?

最佳答案

由于 CPython 被 GIL 限制为使用线程的真正并发,所有计算实际上都是串行发生的。相反,您可以使用 python 多处理模块并创建一个进程池来完成繁重的计算任务。

有一些微框架,例如 twisted klein除了 celery 之外,它还可以帮助实现您正在寻找的并发性和独立性。它们不一定更好,但适用于那些不想弄乱在同步 flask 和实际业务逻辑时可能出现的各种问题的人,尤其是当响应基于此时事件。

关于python - flask 中长时间运行的作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33995569/

相关文章:

python - 属性错误 : type object 'Player' has no attribute 'image_dict'

python - Celery - 内存泄漏(即使工作人员完成任务后内存也不会释放)

python - Celery定时任务eta(apply_async(eta=xxx :23) option is not working

python - 使用多线程/多处理加速抓取

python - 使用 Python 多处理在 worker 之间共享一个变量

python - 图像在本地工作,但部署到 Google App Engine 后就无法工作?

python - 在字段中添加 "UOM"(测量单位) - OpenErp

python - virtualenv:在 Mac 上安装 Pip 后找不到命令

python - 每个重试周期增加 celery 重试时间

python - 如何控制python的ThreadPoolExecutor的吞吐速度?