如何每n秒运行一个耗时的过程?

时间:2017-02-28 21:40:00

标签: python python-multithreading

我需要每隔n秒运行一个进程。我认为Threading.timer是最好的方法。但是当我运行我的命令时,它并不是每n秒运行一次,而是开始反复运行,比给定的n少得多,并且循环不可阻挡。这是我的代码:

#!/usr/bin/python

import threading
import time

brake = 10
k = int(5)

def printit():
    for x in range(k):
        threading.Timer((int(brake)), printit).start()
        print "Hello World!"  
        #i have a longer process here, it takes a few seconds to run
        #i give more than double of the time needed to run it
printit()

所以我想要发生的是:它打印Hello world 5次,每次之间有10秒制动。但相反,它打印速度更快,并且不会停止。 我错过了一些参数,还是我试图运行的过程出现问题?我也很欣赏任何其他更简单的方法来每隔n秒运行一次。

4 个答案:

答案 0 :(得分:1)

虽然您似乎使用python2.x(打印为关键字),因此睡眠是一个好主意,如果您使用py3.4以上有asyncio

import asyncio

def do_task(end_time, loop):
    print('hello world!')
    if (loop.time() + 1.0) < end_time:
        loop.call_later(1, do_task, end_time, loop)
    else:
        loop.stop()

loop = asyncio.get_event_loop()

end_time = loop.time() + 10.0
loop.call_soon(do_task, end_time, loop)

loop.run_forever()
loop.close()

答案 1 :(得分:0)

你可以在python中使用time

import time

k = int(5)

def printit():
    for x in range(k):
        time.sleep(5)
        print "Hello World!"
        #i have a longer process here, it takes a few seconds to run
        #i give more than double of the time needed to run it
printit()

答案 2 :(得分:0)

你真想暂停10秒钟。

func f() {} // Type `(Void) -> Void`
print(f())

如果您确实需要计时器方法来在单独的线程中运行所有操作。您需要将打印功能与计时器功能分开。但是,这将打印&#34; Hello World!&#34; 10秒后,同时完成5次。

time.sleep(brake)

答案 3 :(得分:0)

感谢所有的答案,但同时我想出了完美的方法:

import time

a=2
b=5

for x in range(a):
    start = time.time()
    print "Hello World!"
    time.sleep(3)
    run = (-(start)+time.time())
    time.sleep(int(b)-(run))

我知道每隔n秒重复运行一个进程的唯一方法。只需使用time.sleep就可以轻松完成,但是如果你有一个更长的过程,你需要在你的过程运行时减少休眠时间。

相关问题