繁体   English   中英

Python 准确时间使用

[英]Python exact time usage

尝试使用每个线程的延迟在不同时间发送多个请求:

def snipe(delay):
    print("Exact drop thread opened..")
    while True:
        if int(round(time.time() * 1000)) == int(droptime - delay):
            send = requests.post("www.example.com")
            print(f"{time.strftime('[%H:%M:%S]')}Exact:  {send}")
            break

droptime 变量在 UNIX 时间,例如: 1595359842794

出于某种原因,只有一半的线程实际上发送了请求,而其他线程由于某种原因只是不触发 if 语句。

有人可以建议一种在特定时间以可调节延迟发送请求的更好方法。

正如@kindall 所说,在while循环中“什么都不做”是一种不好的做法,它一直在消耗CPU。 在这种情况下,使用time.sleep通常会更好(尽管有更好的和更复杂的选项,例如导致优雅解决方案的异步方法)。 不过,在您的情况下,我不确定您到底想要实现什么,但是如果您尝试发送请求而不相互阻塞,那么以下应该可以工作:

def snipe(delay):
    print("Exact drop thread opened..")
    send = requests.post("www.google.com")
    print(f"{time.strftime('[%H:%M:%S]')}Exact:  {send}")
    
threads = []
for i in range(5):
    t = mt.Thread(target=snipe, args=(i,))
    threads.append(t)
    t.start()

基本上,您不需要控制这些请求的阻塞/解除阻塞性质,因为这是一项 I/O 绑定工作(不需要太多 cpu,这是 GIL 的一个限制,但绝对不适用于这种规模的任务),将由操作系统处理,并且在大多数情况下以最佳方式处理。

如果您具体了解时间延迟/时间戳(这里似乎不合理),那么您可以看看这个

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM