Tha*_*yen 7 python asynchronous flask
我正在尝试使多个请求异步并得到响应,我正在concurrent.futures这样做,但在我的函数中使用current_appwhich fromflask并且我总是收到此错误:
RuntimeError: Working outside of application context.
我不知道如何解决这个问题。有人可以帮忙吗?
下面是我的代码:
运行.py:
import concurrent.futures
from flask import current_app
from http_calls import get_price, get_items
def init():
with current_app._get_current_object().test_request_context():
with concurrent.futures.ThreadPoolExecutor(max_workers=20) as executor:
futs = []
futs.append(executor.submit(get_price))
futs.append(executor.submit(get_items))
print([fut.result() for fut in concurrent.futures.as_completed(futs)])
init()
Run Code Online (Sandbox Code Playgroud)
http_calls.py
from flask import current_app
def get_price():
url = current_app.config['get_price_url']
return requests.get(url).json()
def get_items():
url = current_app.config['get_items_url']
return requests.get(url).json()
Run Code Online (Sandbox Code Playgroud)
dav*_*ing 12
我在 Flask 中使用 concurrent.futures 时遇到了类似的问题。我编写了Flask-Executor作为对 concurrent.futures 的 Flask 友好包装来解决这个问题。将这两者一起工作可能是一种更简单的方法。
您应该在脚本中导入 Flask 实例。current_app在应用程序上下文下使用。
import concurrent.futures
from your_application import your_app # or create_app function to return a Flask instance
from flask import current_app
from http_calls import get_price, get_items
def init():
with your_app.app_context():
with concurrent.futures.ThreadPoolExecutor(max_workers=20) as executor:
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4518 次 |
| 最近记录: |