【问题标题】:New to Asyncio - I'm trying to implement asyncio with ccxt and i'm getting this errorAsyncio 的新手 - 我正在尝试使用 ccxt 实现 asyncio,但出现此错误
【发布时间】:2022-03-06 19:34:08
【问题描述】:

我试图从这里开始简单,这样我就可以掌握这些东西的窍门。我理解 asyncio 的前提,但是尝试将它与 ccxt 一起使用时会让人感到困惑。除了 asyncio 文档之外,还有什么推荐的资源可以转发给我吗?

import time
import ccxt.async_support as ccxt
import configpro

exchange = ccxt.coinbasepro({
    'apiKey': configpro.apiKey,
    'secret':configpro.secret,
    'password': configpro.password,
    'enableRateLimit': True})

async def test():
    async with exchange as session:
        print(await session.fetch_ticker('BTC/USD'))
    
    
    
async def main():
    

    print(f"started at {time.strftime('%X')}")

    await test()

    print(f"finished at {time.strftime('%X')}")
    
asyncio.run(main())

我的错误:

Exception ignored in: <function _ProactorBasePipeTransport.__del__ at 0x000001ED6BE8EDC0>
Traceback (most recent call last):
  File "C:\Users\micha\AppData\Local\Programs\Python\Python39\lib\asyncio\proactor_events.py", line 116, in __del__
    self.close()
  File "C:\Users\micha\AppData\Local\Programs\Python\Python39\lib\asyncio\proactor_events.py", line 108, in close
    self._loop.call_soon(self._call_connection_lost, None)
  File "C:\Users\micha\AppData\Local\Programs\Python\Python39\lib\asyncio\base_events.py", line 746, in call_soon
    self._check_closed()
  File "C:\Users\micha\AppData\Local\Programs\Python\Python39\lib\asyncio\base_events.py", line 510, in _check_closed
    raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed

【问题讨论】:

  • 哇,谢谢!!像有人回答的那样添加这个有效! asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。
  • 有关更多上下文,这绝对是我的猜测,但您的例外基本上是在事件循环结束后 asyncio 仍在尝试执行任务(显然删除某些内容)。不知道为什么会这样,但这就是我指向那个答案的方向。

标签: python python-asyncio ccxt


【解决方案1】:

这应该可行:

import time
import asyncio
import ccxt.async_support as ccxt
import configpro

print('CCXT Version:', ccxt.__version__)


async def test(exchange):
    ticker = await exchange.fetch_ticker('BTC/USD')
    pprint(ticker)

    
async def main():
    exchange = ccxt.coinbasepro({
        'apiKey': configpro.apiKey,
        'secret':configpro.secret,
        'password': configpro.password,
    })
    print(f"started at {time.strftime('%X')}")
    await test(exchange)
    print(f"finished at {time.strftime('%X')}")
    await exchange.close()


asyncio.run(main())

在此处查看示例:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-14
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多