在 .ipynb 中工作的异步函数在 .py 中不起作用

问题描述 投票:0回答:1

所以我正在尝试构建一个使用Binance的API传输BTC数据的脚本,类似于this。然而问题是,在 .ipynb 单元中测试时,以下代码可以完美运行:

import asyncio
import nest_asyncio

from binance.client import Client
from binance import BinanceSocketManager

nest_asyncio.apply()

async def main():
    client = Client()
    
    bsm = BinanceSocketManager(client)

    socket = bsm.trade_socket('BTCUSDT')

    async with socket as ts:
        while True:
            print('before await')
            msg = await ts.recv()
            print(msg)

# ---

# loop = asyncio.new_event_loop()
# loop.run_until_complete(main())
asyncio.run(main())

但是,当我将此代码放入 .py 文件中并尝试执行它时,我只能到达第一个 print('before wait') 指令,并且没有显示任何数据。

我正在 .dev 容器内开发 .ipynb 文件和 .py 文件,并且两者都安装了相同的 Python 和库版本。

我尝试过使用不同的指令,例如运行异步函数

loop = asyncio.new_event_loop()
loop.run_until_complete(main())

# instead of 
asyncio.run(main())

然而,在这两种情况下,它在 .ipynb 文件中工作得很好,但在 .py 文件中则不然。

我将非常感谢任何帮助,谢谢! :)

python asynchronous jupyter-notebook python-asyncio binance
1个回答
0
投票

在 Windows 10 上对我来说就像一个魅力。

复制您的代码,安装模块。

使用python虚拟环境。

python 3.12.1
python-binance===1.0.19
nest_asyncio===1.5.8
def async_test():
    import asyncio
    import nest_asyncio

    from binance.client import Client
    from binance import BinanceSocketManager

    nest_asyncio.apply()

    async def main():
        client = Client()

        bsm = BinanceSocketManager(client)

        socket = bsm.trade_socket('BTCUSDT')

        async with socket as ts:
            while True:
                print('before await')
                msg = await ts.recv()
                print(msg)

    # ---

    # loop = asyncio.new_event_loop()
    # loop.run_until_complete(main())
    asyncio.run(main())

if __name__ == '__main__':
    async_test()

直到 CTRL-C 为止的输出

before await
{'e': 'trade', 'E': 1704466694470, 's': 'BTCUSDT', 't': 3353984451, 'p': '43563.11000000', 'q': '0.00795000', 'b': 24098103240, 'a': 24098103350, 'T': 1704466694469, 'm': True, 'M': True}

before await
{'e': 'trade', 'E': 1704466694733, 's': 'BTCUSDT', 't': 3353984452, 'p': '43563.12000000', 'q': '0.00134000', 'b': 24098103375, 'a': 24098103219, 'T': 1704466694732, 'm': False, 'M': True}

...

© www.soinside.com 2019 - 2024. All rights reserved.