반응형
pyupbit 의 WebSocketClient 예제를 한번 실행해 보았다. 예제는 https://wikidocs.net/168437 에 있는 가장 간단한 예제이다.
import multiprocessing as mp
import pyupbit
if __name__ == "__main__":
queue = mp.Queue()
proc = mp.Process(
target=pyupbit.WebSocketClient,
args=('ticker', ["KRW-BTC"], queue),
daemon=True
)
proc.start()
while True:
data = queue.get()
print(data)
실행해 보았는데, 에러가 발생하였다. 에러는 다음과 같다.
self._target(*self._args, **self._kwargs)
File "C:\PyEnvs\v3864\lib\site-packages\pyupbit\websocket_api.py", line 12, in __init__
self.run()
File "C:\PyEnvs\v3864\lib\site-packages\pyupbit\websocket_api.py", line 36, in run
asyncio.run(self.connect_socket())
File "C:\Programs\Python3864\lib\asyncio\runners.py", line 43, in run
return loop.run_until_complete(main)
File "C:\Programs\Python3864\lib\asyncio\base_events.py", line 616, in run_until_complete
return future.result()
File "C:\PyEnvs\v3864\lib\site-packages\pyupbit\websocket_api.py", line 16, in connect_socket
async for websocket in websockets.connect(uri, ping_interval=60):
TypeError: 'async for' requires an object with __aiter__ method, got Connect
사용자 코드가 아닌, pyupbit 라이브러리 코드 안에서 에러가 발생했다.
에러를 해석하 보면, async for 는 __aiter__ 가 필요한데, __aiter__ 가 아닌 Connect 라는 불평이다. 이에 해당하는 코드는 async for websocket in websockets.connect(uri, ping_interval=60): 이다. ( aiter 는 async iter 겠지. )
유추해 보자면, websockets.connect(uri, ping_intervals=60) 이 __aiter__ 여야 하는데, Connect 객체라는 말이다. 대체 문제가 뭔지 모르겠어서 고생고생 이것저것 해보다가, websockets.connect 는 websockets 패키지의 일부라는 생각이 들어서, websockets 패키지를 업데이트 해 보았다.
pip install -U websockets
websockets 는 9.1에서 10.3 으로 업데이트가 일어났고, 업데이트 이후에는 에러가 없이 잘 동작하였다. async 랑 안 친해서, 쫄았는데, 다행히 간단히 해결됐다.
websockets 의 10 버전으로 올라가면서, 아마도 connect 가 __aiter__ 로 바뀐 것 같다.
728x90
'프로그래밍 > Python' 카테고리의 다른 글
[Python] 십진수소수 이진수로 변환하기 (0) | 2022.09.21 |
---|---|
Flask ImportError: cannot import name 'soft_unicode' from 'markupsafe' (0) | 2022.07.19 |
파이썬 베쎌함수 그래프 그리기 (0) | 2022.07.08 |
Geopy AttributeError: 'NoneType' object has no attribute 'latitude' (0) | 2022.06.27 |
pandas ValueError: If using all scalar values, you must pass an index (0) | 2022.06.08 |