为什么我的线程(似乎)完成得比预期的要早?

时间:2019-07-02 15:07:36

标签: python multithreading time sleep

我正在研究一个程序,该程序涉及每3.6秒向API发送一次请求。为了以最有效的方式做到这一点,我运行了两个线程,一个线程执行睡眠3.6秒​​,另一个线程发送API请求。但是,尽管其中一个线程处于休眠状态,但似乎两个线程都可以在3.6秒内正常完成。是某种精度错误,我没有看到的由Python完成的优化还是导致此问题的其他问题?

我知道我可以通过将睡眠时间简单地延长几毫秒来解决此问题,但是我宁愿精确地并且以“正确的方式”完成它。

    while len(sitelist[1]) > 0:
        t = time.time()
        t1 = threading.Thread(target=phishProcessing, args=(input, sitelist, output))
        t2 = threading.Thread(target=stdSleep)
        t1.start()
        t2.start()
        t1.join()
        t2.join()
        if time.time() - t <= 3.6:
            print("Error, time taken less than thread: ",time.time() - t)

睡眠方法如下:

def stdSleep():
    time.sleep(3.6)
    return 0

我希望这段代码能做什么:

  • 获取当前时间。
  • 创建两个线程,一个用于API请求,一个用于睡眠。
  • 开始处理,然后开始休眠。
  • 等待直到线程完成。
  • 如果当前时间与开始时间之间的时间差小于3.6秒,则将其打印出来。但是,从理论上讲,这应该永远不会运行。

这是程序的实际输出:https://imgur.com/a/KBhTuCG

似乎线程在1到2毫秒之间完成得太早了。

0 个答案:

没有答案