我是编程和学习python3的新手 最近我正在尝试使用binance的api制作加密货币交易系统 Here是api文件。
文档中关于时间戳的逻辑和解释如下:
要发送的时间戳,应该是创建和发送请求的毫秒时间戳。
if(timestamp< serverTime&&(serverTime - timestamp)< = recvWindow)
{//处理请求} else {//拒绝请求}
根据这个逻辑,我发送请求的时间应该少于服务器上的时间。问题是我没有通过这个逻辑。
当我使用此代码调用time.time()和服务器时间时,
import requests
import simplejson as json
import time
base_url = "https://api.binance.com"
servertime_endpoint="/api/v1/time"
url = base_url + servertime_endpoint
t = time.time()*1000
r = requests.get(url)
result = json.loads(r.content)
print(int(t)-result["serverTime"])
time.time()大于服务器时间,以便从最后一个句子返回正值。我该怎么办?
答案 0 :(得分:1)
这很可能是由于您使用分辨率低于服务器运行速度的时钟运行的操作系统。在Linux或Mac OS上运行时,Python使用time.time()
的系统调用,将时间缩短到微秒分辨率(或更好)。在Windows计算机上运行时,它只会将时间缩短到毫秒分辨率。
您可以通过编程繁忙的循环来检查time.time()
功能的分辨率并等到时间变化:使用this incredibly useful answer中的代码查看您的分辨率。
如果您在分辨率为~0.002秒(1毫秒)的操作系统上运行,而服务器报告的分辨率为~0.000001秒(1微秒),那么即使您的时钟完全同步并且那里是零网络延迟,您仍然希望您的时间超过50%的呼叫服务器时间仅仅因为quantization noise。例如,如果服务器报告的时间为12345.678501(微秒分辨率),则您的计算机将报告12345.679(毫秒级分辨率)的时间,并且前方似乎是499微秒。
一些快速解决方案是: