异步Flask功能

时间:2015-11-10 18:16:35

标签: python asynchronous flask celery

我有一个应用程序,我需要执行一些异步操作。我读过芹菜,但不确定它是否正确。

基本上我有一个接受输入并运行查询以返回模板的按钮,这很快,但我希望它还运行另一个任务(向Web服务传递SOAP信封),这是慢。我不希望用户必须等待Web服务调用完成。我希望运行返回模板的查询能够尽快发生新数据,并在后台进行Web服务调用。

这可行吗?

2 个答案:

答案 0 :(得分:0)

我知道这里有许多与Celery相关的线程,但这可能会提供一些服务。

使用Celery进行异步活动不仅需要安装和导入lib。

要求:

Celery lib
Queue broker, like Redis (in memory db), installed
Separate file that creates celery object

我在Celery上找到了没有烧瓶的Flask文档。我首选的方法是创建一个tasks.py文件并放入

from celery import Celery
# Other imports for functionality here

app = Celery('tasks', broker='redis://localhost:6379')

@app.tasks
def your_function(args):
    do something with args
    return something

然后在应用程序文件中确保导入:

from tasks import your_function

然后在应用中需要的地方使用它

your_function(args)

然后您必须确保芹菜守护程序/工作程序正在运行。这可以通过init,systemd,launchctl或CLI手动完成(非理想)。 Redis还必须运行并聆听您提供的URL。

我希望这有助于其他人。

答案 1 :(得分:0)

听起来你需要龙卷风!与flask

兼容的异步Web服务器网关
from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from YourModule import app

http_server = HTTPServer(WSGIContainer(app))
http_server.listen(8080)
IOLoop.instance().start()

我更喜欢龙卷风的速度,可靠性和简单性,而Flask,我喜欢它的美丽