【问题标题】:Calling asynchronous function from dash从破折号调用异步函数
【发布时间】:2021-08-30 14:30:07
【问题描述】:

一旦单个function 需要awaited,它似乎就像需要awaited 的functions 的级联,直到你达到添加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 是一个调用 asynchronous 代码的 function

df = amp.get_data_job(symbolStr)

我无法将回调 update_interval 转换为 asynchronous function (AFAIK)。推荐的方法是什么。我的意思是,仍然保留dash

【问题讨论】:

  • Dash 是 Fl​​ask,Flask 不是异步框架,为什么需要在像 Flask 这样的多线程 Web 服务器中使用异步函数?

标签: flask async-await python-asyncio plotly-dash


【解决方案1】:

使用 FastApi 并在旁边提供 dash 时遇到了同样的情况。使用 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"))

【讨论】:

  • 您可以通过将return True if foo == "bar" else False 简化为return foo == "bar" 来改进它
猜你喜欢
  • 1970-01-01
  • 2020-10-21
  • 2021-12-02
  • 1970-01-01
  • 2020-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多