首页 > 解决方案 > 从破折号调用异步函数

问题描述

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(AFAIK)。推荐的方法是什么。我的意思是,仍然保持dash

标签: flaskasync-awaitpython-asyncioplotly-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"))

推荐阅读