python - Binance 多线程套接字 - 不同时调用的函数
问题描述
我有一个代码可以从币安接收关于当前价格的数据:
import asyncio
from binance import AsyncClient, BinanceSocketManager
import time
from datetime import datetime
def analyze(res):
kline = res['k']
if kline['x']: #candle is compleated
print('{} start_sleeping {} {}'.format(
datetime.now(),
kline['s'],
datetime.fromtimestamp(kline['t'] / 1000),
))
time.sleep(5)
print('{} finish_sleeping {}'.format(datetime.now(), kline['s']))
async def open_binance_stream(symbol):
client = await AsyncClient.create()
bm = BinanceSocketManager(client)
ts = bm.kline_socket(symbol)
async with ts as tscm:
while True:
res = await tscm.recv()
analyze(res)
await client.close_connection()
async def main():
t1 = asyncio.create_task(open_binance_stream('ETHBTC'))
t2 = asyncio.create_task(open_binance_stream('XRPBTC'))
await asyncio.gather(*[t1, t2])
if __name__ == "__main__":
asyncio.run(main())
如何使analyze
函数同时被调用。Binance 使用两个流数据(ETHBTC 和 XRPBTC)同时发送信息
但是只有在前一个(睡眠)完成后analyze
才会调用函数。analyze
我希望函数analyze
被立即独立地调用。
解决方案
您是否尝试将分析放在一个线程中。我认为它会达到你想要的。
import asyncio
from binance import AsyncClient, BinanceSocketManager
import time
from datetime import datetime
from threading import Thread
def analyze(res):
kline = res['k']
if kline['x']: #candle is compleated
print('{} start_sleeping {} {}'.format(
datetime.now(),
kline['s'],
datetime.fromtimestamp(kline['t'] / 1000),
))
time.sleep(5)
print('{} finish_sleeping {}'.format(datetime.now(), kline['s']))
async def open_binance_stream(symbol):
client = await AsyncClient.create()
bm = BinanceSocketManager(client)
ts = bm.kline_socket(symbol)
async with ts as tscm:
while True:
res = await tscm.recv()
Thread(target= analyze, args = (res)).start()
await client.close_connection()
async def main():
t1 = asyncio.create_task(open_binance_stream('ETHBTC'))
t2 = asyncio.create_task(open_binance_stream('XRPBTC'))
await asyncio.gather(*[t1, t2])
if __name__ == "__main__":
asyncio.run(main())
这应该按预期工作。
推荐阅读
- unity3d - 通过网络将视频从 HoloLens2 流式传输到 PC
- go - 如果另一个 goroutines 崩溃了,你如何保持 goroutines 运行?
- android - 私有访问适配器类上的错误 Recyclerview 视图持有者
- powerbi - SUMMARIZECOLUMNS 返回所有未来日期的结果
- python-3.x - 如何在 Python 中使用 selenium webdriver 从表中提取数据,但有一些例外
- django - 在heroku中找不到静态文件
- node.js - MySQL 节点
- prestashop - 显示 SpecificPriceRule 信息
- flutter - 排序图
颤振,飞镖 - ios - 如何更改 UIContextualAction 按钮的标题颜色和图像色调颜色