收集数据和使用datetime.sleep()时滞

时间:2017-01-25 16:16:42

标签: python python-3.x delay

我每分钟都试图通过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

发生了什么事?为何延迟?

1 个答案:

答案 0 :(得分:1)

看起来IQOptionAPI使用websocket-client,这是异步的。发送请求将立即返回,而不等待服务器的响应。您在收到回复之前正在检查回复。因此,您获得的实际上是上一个请求的结果。这就是为什么它对应于您使用的sleep的长度。

我不会立即在IQOptionAPI中看到一种方法来制作同步请求或在响应进入时获得任何反馈,但最好近距离观察是否确实存在某种方式。作为解决方法,尝试在请求和检查响应之间插入几秒钟的延迟:

api.getcandles(1, 1)
time.sleep(2)
candles = api.candles.candles_data