我创建了一个模块来执行一些繁重的计算,并返回一些数据以存储在 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/