我用的visual studio code
也提示:
Exception: TqSdk 使用了 python3 的原生协程和异步通讯库 asyncio,您所使用的 IDE 不支持 asyncio, 请使用 pycharm 或其它支持 asyncio 的 IDE
我发现只要在协程里调用get_kline_serial就会提示,在协程外面调用就不会报这个错误。
我看get_kline_serial里用了wait_update这个方法,里面有一句异常提示(也在上面那个异常提示上面):
不能在协程中调用 wait_update, 如需在协程中等待业务数据更新请使用 register_update_notify
意思是协程里面不能使用wait_update,但是get_kline_serial又不能让我决定用register_update_notify还是wait_update,或者说只有我自己去修改api.py这个文件?
协程里可以使用get_kline,可以贴出你能够复现的最小代码
或者参考这个帖子进行异步改写 https://www.shinnytech.com/question/12741/
import websockets
import asyncio
import time
import struct
import sqlite3
from tqsdk import TqApi, TqAuth
tq_api = TqApi(auth=TqAuth(“xxx”, “xxx”)) # 这里是天勤用户名密码
def get_kline_serial(target_id):
klines = tq_api.get_kline_serial(
target_id, 86400, 8964)
return klines
async def serve(client_websocket, path):
kliens = get_kline_serial(‘SHFE.CU2106’)
async def main():
await websockets.serve(serve, ‘0.0.0.0’, 1234, ping_interval=None, ping_timeout=None)
# asyncio.run(main())
loop = asyncio.new_event_loop()
loop.run_until_complete(main())
loop.run_forever()
那个用户名密码要设置一下,
逻辑很简单,就是用websockets创建一个websocket服务端,
websocket客户端连接1234端口以后,服务协程里面调用get_kline_serial就会报错。
我先按照您的帖子尝试修改看看
本来有缩进的,代码贴上来不知道咋就没了
我看了一下那个帖子,跟我讲的貌似不是一回事,
我没有仔细读过websockets包的代码,莫非是它和tqsdk不兼容,特有的问题?
验证过不是websockets的问题,即便是创建一个简单的事件循环,然后在事件循环里调用async函数,函数里调用get_kline_serial都不行
因为我用了websockets这个包,通过websocket用于给网页提供历史行情信息,但是websockets里的发送接收都是在协程里面,就没办法用tqsdk了