我的 time.time() 大于服务器时间
My time.time() is bigger than server time
我是编程和学习的新手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 }
按照这个逻辑,我发送请求的时间应该小于服务器上的时间。问题是我没有通过这个逻辑
当我使用此代码调用 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() 比服务器时间大,所以我从最后一句话得到 return 正值。我该怎么办?
这很可能是由于您 运行ning 的操作系统使用的时钟分辨率低于服务器 运行ning 的时钟。当 运行ning 在 Linux 或 Mac OS 上时,Python 使用 time.time()
的系统调用 returns 时间减少到微秒 分辨率(或更好)。在 Windows 机器上 运行ning 时,它仅 returns 时间降低到 毫秒 分辨率。
您可以通过编写一个繁忙的循环并等待时间更改来检查 time.time()
函数的分辨率:使用 this incredibly useful answer 中的代码查看您的分辨率。
如果您运行正在使用分辨率为~0.001 秒(1 毫秒)的OS,而服务器以~0.000001 秒(1 微秒)的分辨率报告时间,那么即使你的时钟完全同步并且网络延迟为零,你仍然会期望你的时间在 50% 的调用中领先于服务器时间,仅仅是因为 quantization noise。例如,如果服务器报告时间为 12345.678501(微秒分辨率),则您的计算机将报告时间为 12345.679(毫秒分辨率)并且看起来提前 499 微秒。
一些快速解决方案是:
- 检查服务器时间是否与您的机器时间相一致,即使看起来您的时间早于服务器时间,也认为它是可接受的;
- 将您的时间减去 500 微秒,以确保量化噪音不会让您领先于服务器;
- 将计时阈值增加500微秒,并检查您的时间与服务器时间的差绝对值是否在范围内;
- 运行 您的代码在具有更高分辨率系统时钟的操作系统上。
我是编程和学习的新手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 }
按照这个逻辑,我发送请求的时间应该小于服务器上的时间。问题是我没有通过这个逻辑
当我使用此代码调用 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() 比服务器时间大,所以我从最后一句话得到 return 正值。我该怎么办?
这很可能是由于您 运行ning 的操作系统使用的时钟分辨率低于服务器 运行ning 的时钟。当 运行ning 在 Linux 或 Mac OS 上时,Python 使用 time.time()
的系统调用 returns 时间减少到微秒 分辨率(或更好)。在 Windows 机器上 运行ning 时,它仅 returns 时间降低到 毫秒 分辨率。
您可以通过编写一个繁忙的循环并等待时间更改来检查 time.time()
函数的分辨率:使用 this incredibly useful answer 中的代码查看您的分辨率。
如果您运行正在使用分辨率为~0.001 秒(1 毫秒)的OS,而服务器以~0.000001 秒(1 微秒)的分辨率报告时间,那么即使你的时钟完全同步并且网络延迟为零,你仍然会期望你的时间在 50% 的调用中领先于服务器时间,仅仅是因为 quantization noise。例如,如果服务器报告时间为 12345.678501(微秒分辨率),则您的计算机将报告时间为 12345.679(毫秒分辨率)并且看起来提前 499 微秒。
一些快速解决方案是:
- 检查服务器时间是否与您的机器时间相一致,即使看起来您的时间早于服务器时间,也认为它是可接受的;
- 将您的时间减去 500 微秒,以确保量化噪音不会让您领先于服务器;
- 将计时阈值增加500微秒,并检查您的时间与服务器时间的差绝对值是否在范围内;
- 运行 您的代码在具有更高分辨率系统时钟的操作系统上。