每y秒运行x秒的Python子进程
我想在Python里面控制一个bash程序。我想每隔x秒运行一个外部命令,持续y秒,然后在y秒后把它杀掉。我在处理线程、休眠和等待等方面遇到了一些麻烦,所以想请人给个简单的例子。
比如,在命令行里使用可能是这样的:
./foo.py --runfor=10 --runevery=60
这意味着foo.py
会每60秒运行一次某个东西,持续10秒(不是说60秒之间的间隔)。如果时间有一秒或几分之一秒的偏差也没关系。我可以通过创建一个阻塞的进程来做到这一点,然后做一些数学运算来设置定时器,但我觉得用线程可能会有更优雅的方法。
2 个回答
0
你可以试试Python的apscheduler模块。它的功能类似于cron风格的调度,也就是可以定时执行任务。想了解更多,可以看看这个链接:http://packages.python.org/APScheduler/
6
这有帮助吗?
import threading
import subprocess
import time
class IntervalRunner(threading.Thread):
def __init__(self, seconds):
self.seconds = seconds
threading.Thread.__init__(self)
def run(self):
while True:
p = subprocess.Popen('ls -la'.split(), shell=False,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
stdout, stderr = p.communicate()
print stdout
time.sleep(self.seconds)
runner = IntervalRunner(10)
runner.start()
runner.join()