一旦需要对单个
function
进行 await
编辑,似乎需要对一系列 functions
进行 await
编辑,直到达到添加 await
会破坏内容的程度:
我有
dash
代码,间歇性地被调用:
def get_data(symbolStr):
print("Getting AR for", symbolStr)
df = amp.get_data_job(symbolStr) #calls async code and need to be awaited
return df
...
html.Div(
dcc.Interval(id='interval1', interval = 900 * 1000, n_intervals=0),
),
html.Div(
dash_table.DataTable(
id='table',
columns=[{"name": i, "id": i} for i in magic_columns],
editable=True,
row_deletable=True
),
)
@app.callback(
[dash.dependencies.Output('table', 'data')],
[dash.dependencies.Input('interval1', 'n_intervals')],
[dash.dependencies.State('table', 'data')]
)
def update_interval(n, data):
allSymbolsDf = pd.DataFrame()
for symbolStr in symbolsStr:
df = get_data(symbolStr)
allSymbolsDf = allSymbolsDf.append(df)
time.sleep(3)
return [allSymbolsDf.to_dict('rows')]
事实是,
get_data
是一个调用function
代码的
asynchronous
df = amp.get_data_job(symbolStr)
我无法将回调
update_interval
变成asynchronous
function
(据我所知)。推荐的解决方法是什么。我的意思是,仍然保留dash
。
使用 FastApi 并在侧面提供破折号时遇到了同样的情况。使用 asyncio.run()
import asyncio
async def asyn_fun(foo):
return True if foo == "bar" else False
def sync_fun(foo):
return asyncio.run(asyn_fun(foo))
print(sync_fun("bar"))
async-dash
包。
他们在链接网站上提供了其使用示例。
asyncio
并不是真正的异步 - 它只是在执行同步操作时阻止异步函数 - 这个包作为替代方案可能值得探索。
ImportError: cannot import name 'escape' from 'jinja2'
请参阅 此 GitHub 问题 作为指导。