我正在尝试构建一个每10分钟运行一次bash脚本的应用程序。我正在使用apscheduler来实现这一点,当我从终端运行我的代码时,它就像时钟工作一样。然而,当我尝试从另一个模块运行代码时,它崩溃我怀疑调用模块正在等待“schedule”模块完成,然后在永远不会发生时崩溃。
错误代码
/bin/bash: line 1: 13613 Killed ( python ) < /tmp/vIZsEfp/26
shell returned 137
调用计划的功能
def shedual_toggled(self,widget):
prosessSchedular.start_background_checker()
安排计划
def schedul_check():
"""set up to call prosess checker every 10 mins"""
print "%s check ran" %(counter)
counter =+ 1
app = prosessCheckerv3.call_bash() < calls the bash file
if app == False:
print "error with bash"
return False
else:
prosessCheckerv3.build_snap_shot(app)
def start_background_checker():
scheduler = BackgroundScheduler()
scheduler.add_job(schedul_check, 'interval', minutes=10)
scheduler.start()
while True:
time.sleep(2)
if __name__ == '__main__':
start_background_checker()
这个程序只需要拨打另一个10分钟。作为旁注,我一直试图尽可能远离多线程,但如果需要的话,那就这样吧。
答案 0 :(得分:0)
好吧,我设法弄明白了。 GTK +不是线程安全的问题所以定时模块需要在另一个线程中运行,否则你可以在调用模块之前/之后实现/进入线程。
我就这样做了。
def shedual_toggeld(self,widget):
onOffSwitch = widget.get_active()
""" After main GTK has logicly finished all GUI work run thread on toggel button """
thread = threading.Thread(target=self.call_schedual, args=(onOffSwitch,))
thread.daemon = True
thread.start()
def call_schedual(self, onOffSwitch):
if onOffSwitch == True:
self.sch.start_background_checker()
else:
self.sch.stop_background_checker()
本文将更详细地介绍它。希望其他人会觉得这很有用。 http://blogs.operationaldynamics.com/andrew/software/gnome-desktop/gtk-thread-awareness