0

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

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

作为练习,我想通过线程和 lambda 来做到这一点。

4

3 回答 3

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!每两秒打印一次。

于 2012-10-20T23:09:38.987 回答
0

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

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

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

嗯,既然我回到了你的问题,这对于你想要的东西来说有点矫枉过正,但我​​会留下它,因为它可能对其他人的其他类似情况有用。

于 2012-10-20T23:07:58.107 回答
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()

可以用装饰器或上下文做得更好,但你明白了。

于 2012-10-20T23:48:46.200 回答