我的时间。时间()大于服务器tim

2024-10-01 11:36:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我是编程和学习python3的新手。
最近我正在尝试使用binance的api制作加密货币交易系统。
Here是api文档。在

文档中时间戳的逻辑和解释如下:

Timestamp, to be sent which should be the millisecond timestamp of when the request was created and sent.

if (timestamp < serverTime && (serverTime - timestamp) <= recvWindow)
{ // process request } else { // reject request }

根据这个逻辑,我发送请求的时间应该小于服务器上的时间。问题是我没有通过这个逻辑。在

我打电话的时候时间。时间()和使用此代码的服务器时间

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"])

在时间。时间()比服务器时间大,因此我从最后一句话中得到的返回值为正值。我该怎么办?在


Tags: the文档import服务器apiurltimerequest
1条回答
网友
1楼 · 发布于 2024-10-01 11:36:44

这很可能是由于您运行的操作系统使用的时钟分辨率低于服务器正在运行的时钟。在Linux或Mac操作系统上运行时,Python使用time.time()的系统调用,该调用将时间返回到微秒分辨率(或更好)。在Windows机器上运行时,它只将时间返回到毫秒分辨率。在

您可以通过编程一个繁忙的循环并等待时间变化来检查time.time()函数的分辨率:使用this incredibly useful answer中的代码来查看您的分辨率。在

如果您在分辨率为~0.001秒(1毫秒)的操作系统上运行,而服务器报告的时间分辨率为~0.000001秒(1微秒),那么即使您的时钟完全同步并且没有网络延迟,在50%的调用中,您仍然希望您的时间比服务器时间早,这仅仅是因为quantization noise。例如,如果服务器报告的时间为12345.678501(微秒分辨率),则您的计算机将报告时间12345.679(毫秒分辨率),并显示为提前499微秒。在

一些快速解决方案是:

  1. 检查服务器时间是否回到您的计算机时间,并调用可接受的,即使它显示您的时间早于服务器时间
  2. 减去500微秒的时间,以保证量化噪声不会让你领先于服务器
  3. 将计时阈值增加500微秒,并检查时间与服务器时间之差的绝对值是否在范围内
  4. 在具有更高分辨率系统时钟的操作系统上运行代码。在

相关问题 更多 >