假設我有一個需要一段時間才能完成的循環,比如讀長文件。我如何在每個時間段都做到這一點,x
(毫秒?),我執行「一些代碼」?Python - 當一個長時間運行的循環正在進行時,如何在同一個作用域中定期「執行某些操作」?
while inFile.readable():
line = inFile.readline()
print(line) # I want to do this every few seconds
我想通過線程和lambdas做這個練習。
假設我有一個需要一段時間才能完成的循環,比如讀長文件。我如何在每個時間段都做到這一點,x
(毫秒?),我執行「一些代碼」?Python - 當一個長時間運行的循環正在進行時,如何在同一個作用域中定期「執行某些操作」?
while inFile.readable():
line = inFile.readline()
print(line) # I want to do this every few seconds
我想通過線程和lambdas做這個練習。
例如:
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()
可以做更好的與裝飾或背景,但你有這個想法。
調查APScheduler它有一個非常簡單的cron類似接口,以特定的時間間隔運行python代碼。
http://packages.python.org/APScheduler/
我用它來安排我的一個項目任務,這是非常穩定和測試,很容易擴展,如果需要其他的方式來存儲您的工作。
嗯,這是有點矯枉過正,因爲我現在回到你的問題,但我會留下它,因爲它可能對其他人的其他類似情況有用。
您可以通過保持你的東西打印最後一次軌道做到這一點:
last = time.time()
while inFile.readable():
line = inFile.readLine()
now = time.time()
if now - last > 2: # seconds
print("time up!")
last = now
如果你的文件需要兩秒鐘以上閱讀,那麼這個循環將打印time up!
每兩秒鐘。
是的,但我有興趣知道如何做到這一點與線程,作爲一個練習,因爲我不知道如何。 – Kache
我不建議用線程來執行這個特定的任務,它只是不必要地使實現複雜化。 (你原來的問題並沒有說明你特別想要線程,這就是爲什麼這個答案存在。) –
我原來的問題在標題中有「如何有線程」。我只是在身體上重複自己的重點。 – Kache