【问题标题】:Running asynchronous functions in non-asynchronous functions在非异步函数中运行异步函数
【发布时间】:2022-11-16 21:32:01
【问题描述】:

我试图在她的异步函数中运行一些异步函数,问题是,我怎么理解函数不是那样运行的,那我该怎么做呢?我不想让 maze_move 函数异步。

async def no_stop():
    #some logic
    await asyncio.sleep(4)

async def stop(stop_time):
    await asyncio.sleep(stop_time)
    #some logic

def maze_move():
    no_stop()
    stop(1.5)

async def main(websocket):
global data_from_client, data_from_server, power_l, power_r
get_params()
get_data_from_server()
get_data_from_client()
while True:
    msg = await websocket.recv()
    allow_data(msg)
    cheker(data_from_client)
    data_from_server['IsBrake'] = data_from_client['IsBrake']
    data_from_server['powerL'] = power_l
    data_from_server['powerR'] = power_r
    await websocket.send(json.dumps(data_from_server))
    print(data_from_client['IsBrake'])

start_server = websockets.serve(main, 'localhost', 8080)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

【问题讨论】:

    标签: python python-asyncio


    【解决方案1】:

    怎么样:

    def maze_move():
        loop = asyncio.get_event_loop()
        loop.run_until_complete(no_stop())
        loop.run_until_complete(stop(1.5))
    

    如果你想同时运行两个协程,那么:

    def maze_move():
        loop = asyncio.get_event_loop()
        loop.run_until_complete(asyncio.gather(no_stop(), stop(1.5)))
    

    【讨论】:

    • 虽然我在问题中没有具体说明,但是maze_move并不是一个先执行的函数,也就是说至少是main函数,它调用了maze_move函数
    • 我编辑了我的问题
    猜你喜欢
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 2021-09-23
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    相关资源
    最近更新 更多