我已經在這個問題上掙扎了大約一個星期的時間去問一個能在幾分鐘內回答問題的人。如何在不退出現有循環的情況下安排任務?
我想運行一個python程序每10秒一次。有很多這類的問題:使用sched
或time.sleep
將工作Use sched module to run at a given time,Python threading.timer - repeat function every 'n' seconds,How to execute a function asynchronously every 60 seconds in Python?
通常情況下的解決方案,但我想開始從cmd2
內的計劃過程中,這已經是一個while False
循環中運行。 (當你退出cmd2
時,它退出這個循環)。因此,當我啓動一個函數重複每10秒,我輸入另一個循環嵌套在cmd2
內,我無法輸入cmd2
命令。通過退出正在重複該功能的子循環,我只能返回cmd2
,因此該功能將停止重複。
明顯的線程化將解決這個問題。我試過threading.Timer
沒有成功。也許真正的問題是我不懂線程或多處理。
下面是代碼,大致同構於我正在使用的代碼示例,使用sched
模塊,這是我開始工作:
import cmd2
import repeated
class prompt(cmd2.Cmd):
"""this lets you enter commands"""
def default(self, line):
return cmd2.Cmd.default(self, line)
def do_exit(self, line):
return True
def do_repeated(self, line):
repeated.func_1()
凡repeated.py看起來是這樣的:
import sched
import time
def func_2(sc):
print 'doing stuff'
sc.enter(10, 0, func_2, (sc,))
def func_1():
s = sched.scheduler(time.time, time.sleep)
s.enter(0, 0, func_2, (s,))
s.run()
謝謝你,我不知道隊列。它看起來會做我正在尋找的東西。但是,我發現了threading.Timer(這是從使用它的答案的數量判斷的首選方法)的簡單方法,並在下面進行了概述。 – Wapiti