Python精确时间使用

2024-09-29 17:19:27 发布

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

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

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语句

是否有人能提出一种更好的方法,在特定时间发送请求,延迟可调。


Tags: sendiftimedef时间线程threadexact
1条回答
网友
1楼 · 发布于 2024-09-29 17:19:27

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

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的一个约束,但对于这种规模的任务肯定不需要),将由操作系统处理,并且在大多数情况下是以最佳方式处理的

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

相关问题 更多 >

    热门问题