Python time.sleep每个常规时间间隔和功能

时间:2018-01-09 11:56:53

标签: python python-multithreading

我需要每隔10秒开始执行一次函数foo(),并且foo()函数需要1到3秒的随机时间来执行。

import time
import datetime

def foo():
    # ... code which takes a random time between 1 and 3 seconds to be executed

while True:
    foo()
    time.sleep(10)

当然在上面的例子中,函数foo()不是每10秒执行一次,而是每10 +随机秒执行一次。

有没有办法在10秒内开始执行foo()?我确信它与线程有关,但找不到合适的例子。

3 个答案:

答案 0 :(得分:3)

是的,它与线程有关,因为你想产生一个不同的线程来异步执行你的函数 - 无论线程执行多长时间,父进程都会等待10秒。

这是在python中执行此操作的标准方法:

import threading

def print_some():
  threading.Timer(10.0, print_some).start()
  print "Hello!"

print_some()

在此处查看更多信息: http://www.bogotobogo.com/python/Multithread/python_multithreading_subclassing_Timer_Object.php

所以在你的情况下,它将是:

import threading
import time

def foo():
    threading.Timer(10.0, foo).start()
    print("hello")

if __name__ == '__main__':
    foo()

答案 1 :(得分:1)

如果你想要穿线,你去吧!

import threading

def foo():
   # does stuff

while True:
   t = threading.Thread(target=foo)
   t.start()
   time.sleep(10)

答案 2 :(得分:0)

示例代码。

import time
import datetime

def foo():
    # ... code which takes a random time between 1 and 3 seconds to be executed

while True:
    start = time.time() 
    foo(random number)
    end = time.time()  - start
    time.sleep(10 - end)