异步 Flask 函数
Asynchronous Flask functions
我在 Flask 中有一个应用程序,我需要对其执行一些异步操作。我读过芹菜,但不确定它是否正确。
基本上我有一个接受输入的按钮和 运行 查询 return 返回到模板,这很快,但我希望它也 运行 另一个任务(针对 Web 服务传递 SOAP 信封),这很慢。我不希望用户必须等待网络服务调用完成。我希望查询 运行 将 return 返回到带有新数据的模板尽快发生,并在后台发生网络服务调用。
这可行吗?
我知道这里有很多与 Celery 相关的话题,但这可能会提供一些服务。
将 Celery 用于异步 activity 需要的不仅仅是安装和导入库。
要求:
Celery lib
Queue broker, like Redis (in memory db), installed
Separate file that creates celery object
我发现关于 Celery 的 Flask 文档缺少 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)
那你一定要保证一个芹菜daemon/worker是运行。这可以通过 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()
我更喜欢 tornado,因为它的速度、可靠性和 Flask 的简单性,我喜欢它的美丽
我在 Flask 中有一个应用程序,我需要对其执行一些异步操作。我读过芹菜,但不确定它是否正确。
基本上我有一个接受输入的按钮和 运行 查询 return 返回到模板,这很快,但我希望它也 运行 另一个任务(针对 Web 服务传递 SOAP 信封),这很慢。我不希望用户必须等待网络服务调用完成。我希望查询 运行 将 return 返回到带有新数据的模板尽快发生,并在后台发生网络服务调用。
这可行吗?
我知道这里有很多与 Celery 相关的话题,但这可能会提供一些服务。
将 Celery 用于异步 activity 需要的不仅仅是安装和导入库。
要求:
Celery lib
Queue broker, like Redis (in memory db), installed
Separate file that creates celery object
我发现关于 Celery 的 Flask 文档缺少 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)
那你一定要保证一个芹菜daemon/worker是运行。这可以通过 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()
我更喜欢 tornado,因为它的速度、可靠性和 Flask 的简单性,我喜欢它的美丽