我在flask中有一个应用程序,需要对它执行一些异步操作。我读过关于芹菜的文章,但不确定它是否正确。
基本上,我有一个按钮,它接受输入并运行查询以返回到模板,这很快,但我希望它也运行另一个任务(针对web服务传递SOAP信封),这很慢。我不希望用户必须等待web服务调用完成。我希望查询能尽快返回到带有新数据的模板,并在后台进行web服务调用。
这可行吗?
我知道这里有很多与Celery相关的线程,但这可能会提供一些服务。
将Celery用于异步活动需要的不仅仅是安装和导入lib。
要求:
Celery lib
Queue broker, like Redis (in memory db), installed
Separate file that creates celery object
我发现缺少关于芹菜的烧瓶文档。我喜欢的方法是创建一个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
我希望这能帮助其他人。
听起来你需要龙卷风!与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的简单性,我喜欢它的美丽