我有一个应用程序,我需要执行一些异步操作。我读过芹菜,但不确定它是否正确。
基本上我有一个接受输入并运行查询以返回模板的按钮,这很快,但我希望它还运行另一个任务(向Web服务传递SOAP信封),这是慢。我不希望用户必须等待Web服务调用完成。我希望运行返回模板的查询能够尽快发生新数据,并在后台进行Web服务调用。
这可行吗?
答案 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)
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,我喜欢它的美丽