假设我有一个循环需要一段时间才能完成,比如读取一个长文件。我如何让它在每个时间段x
(毫秒?),我执行“一些代码”?
while inFile.readable():
line = inFile.readline()
print(line) # I want to do this every few seconds
作为练习,我想通过线程和 lambda 来做到这一点。
假设我有一个循环需要一段时间才能完成,比如读取一个长文件。我如何让它在每个时间段x
(毫秒?),我执行“一些代码”?
while inFile.readable():
line = inFile.readline()
print(line) # I want to do this every few seconds
作为练习,我想通过线程和 lambda 来做到这一点。
您可以通过跟踪上次打印的时间来做到这一点:
last = time.time()
while inFile.readable():
line = inFile.readLine()
now = time.time()
if now - last > 2: # seconds
print("time up!")
last = now
如果您的文件读取时间超过两秒,则该循环将time up!
每两秒打印一次。
查看 APScheduler,它有一个非常简单的类似 cron 的界面,可以在特定的时间间隔内运行 python 代码。
http://packages.python.org/APScheduler/
我用它来为我的一个项目安排任务,如果您需要其他方式来存储作业,它非常稳定且经过测试并且很容易扩展。
嗯,既然我回到了你的问题,这对于你想要的东西来说有点矫枉过正,但我会留下它,因为它可能对其他人的其他类似情况有用。
例如:
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()
可以用装饰器或上下文做得更好,但你明白了。