我需要每隔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()?我确信它与线程有关,但找不到合适的例子。
答案 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)