我每分钟都试图通过API收集cotizations的数据,为此我使用了一个暂停60秒的循环,实际上这一切都有效,但我遇到了一些麻烦。
例如,当我在12:00
时发送请愿书时,它会收到11:59
的数据,但我希望收到12:00
的数据。
这只发生在我使用time.sleep()
时,延迟与我放入time.sleep()
函数的秒数成比例
这是我的代码:
from iqoptionapi.api import IQOptionAPI
from datetime import datetime
import time
candles = None
contador = 1
while True:
if candles is None:
api = IQOptionAPI("iqoption.com", "user", "pass") # Data for conection
api.connect()
api.getcandles(1,1) # (id_active, time)
candles = api.candles.candles_data # List with candles
print ("Try....\n")
else:
print ("Candle petition:", contador, "-", datetime.now(), "\n")
api.getcandles(1, 1)
candles = api.candles.candles_data
print (candles, "\n")
print ("First list:", datetime.fromtimestamp(candles[0][0]),
"Second list:", datetime.fromtimestamp(candles[1][0]), "\n")
contador += 1
time.sleep(60)
这些是我的结果:
Candle petition: 2 - 2017-01-25 10:14:05.554242
[[1485360784, 1073590, 1073600, 1073600, 1073590], [1485360785,
1073600, 1073595, 1073600, 1073595]]
First list: 2017-01-25 10:13:04 Second list: 2017-01-25 10:13:05
发生了什么事?为何延迟?
答案 0 :(得分:1)
看起来IQOptionAPI使用websocket-client,这是异步的。发送请求将立即返回,而不等待服务器的响应。您在收到回复之前正在检查回复。因此,您获得的实际上是上一个请求的结果。这就是为什么它对应于您使用的sleep
的长度。
我不会立即在IQOptionAPI中看到一种方法来制作同步请求或在响应进入时获得任何反馈,但最好近距离观察是否确实存在某种方式。作为解决方法,尝试在请求和检查响应之间插入几秒钟的延迟:
api.getcandles(1, 1)
time.sleep(2)
candles = api.candles.candles_data