Python - 当一个长时间运行的循环正在进行时,如何让一个线程在同一范围内定期“做某事”?

时间:2012-10-20 23:05:45

标签: python multithreading lambda

假设我有一个循环,需要一段时间才能完成,比如阅读一个长文件。如何在每个时间段内x(毫秒?),我执行“一些代码”?

while inFile.readable():
    line = inFile.readline()
    print(line)   # I want to do this every few seconds

我想通过线程和lambdas这样做,作为练习。

3 个答案:

答案 0 :(得分:1)

您可以通过跟踪上次打印的内容来执行此操作:

last = time.time()
while inFile.readable():
    line = inFile.readLine()
    now = time.time()
    if now - last > 2: # seconds
        print("time up!")
        last = now

如果你的文件读取时间超过两秒,那么该循环将每两秒打印一次time up!

答案 1 :(得分:0)

查看APScheduler它有一个非常简单的cron接口,可以在特定的时间间隔内运行python代码。

http://packages.python.org/APScheduler/

我用它来为我的项目安排任务,如果你需要其他方式存储你的工作,它非常稳定,经过测试并且很容易扩展。

嗯,现在回到你的问题,这对你想要的东西来说有点过分了,但我会留下它,因为它可能对其他人的其他类似情况有用。

答案 2 :(得分:0)

例如:

import thread, time

def takes_a_while():

    def print_status():
        while True:
            print i   # print current i every two seconds
            time.sleep(2)

    status_thread = thread.start_new_thread(print_status, ())
    for i in xrange(10000000):
        print '*',
        time.sleep(0.1)
    status_thread.exit()

takes_a_while()

可以使用装饰器或上下文更好地完成,但你明白了。