sas*_*hab 6 python long-running-processes flask gunicorn
我必须在我的Flask应用程序中做一些长时间的工作.我想做异步.刚开始工作,然后从javascript检查状态.
我正在尝试做类似的事情:
@app.route('/sync')
def sync():
p = Process(target=routine, args=('abc',))
p.start()
return "Working..."
Run Code Online (Sandbox Code Playgroud)
但它创造了已经不复存在的枪支工人.
怎么解决?我应该使用像芹菜这样的东西吗?
pac*_*cha 11
有很多选择.您可以开发自己的解决方案,使用Celery或Twisted(我确信有更多已有的选项,但那些是最常见的选项).
开发内部解决方案并不困难.您可以使用multiprocessing
Python标准库的模块:
当然,您必须考虑存储计算结果的位置以及错误发生的情况.
与芹菜一起使用也很容易.它看起来如下.要定义要异步执行的函数:
@celery.task
def mytask(data):
... do a lot of work ...
Run Code Online (Sandbox Code Playgroud)
然后,不是直接调用任务,而是直接mytask(data)
执行它,使用delay
方法:
result = mytask.delay(mydata)
Run Code Online (Sandbox Code Playgroud)
最后,您可以使用以下方法检查结果是否可用ready
:
result.ready()
Run Code Online (Sandbox Code Playgroud)
但是,请记住,要使用Celery,您必须运行外部工作进程.
我从来没有看过扭曲,所以我不能告诉你它是否比这更复杂或更复杂(但你应该做你想做的事情也应该没问题).
无论如何,任何这些解决方案都应该与Flask一起使用.要检查的结果并不重要,在所有的,如果你使用JavaScript.只需创建检查状态的视图返回JSON(您可以使用Flask jsonify
).
归档时间: |
|
查看次数: |
4134 次 |
最近记录: |