有没有办法让产生新线程的父级捕获产生的线程异常?以下是我想要完成的一个真实的基本示例.当引发Exception时它应该停止计数,但我不知道如何捕获它.异常线程安全吗?我希望能够使用该Subprocess
模块,但我不习惯使用Python 2.3,我不知道如何做到这一点.可能使用该threading
模块?
import time
import thread
def test():
try:
test = thread.start_new_thread(watchdog, (5,))
count(10)
except:
print('Stopped Counting')
def count(num):
for i in range(num):
print i
time.sleep(1)
def watchdog(timeout):
time.sleep(timeout)
raise Exception('Ran out of time')
if __name__ == '__main__':
test()
Run Code Online (Sandbox Code Playgroud)
UPDATE
我的原始代码有点误导.它真的在寻找更像这样的东西:
import time
import thread
import os
def test():
try:
test = thread.start_new_thread(watchdog, (5,))
os.system('count_to_10.exe')
except:
print('Stopped Counting')
def watchdog(timeout):
time.sleep(timeout)
raise Exception('Ran out of time')
if __name__ == '__main__':
test()
Run Code Online (Sandbox Code Playgroud)
我试图创建一个看门狗来杀死os.system调用,如果该程序由于某种原因挂起.
当我们启用CONFIG_DETECT_SOFTLOCKUP
检测软锁定时,它会创建一个新的任务,该任务khungtaskd
将每1秒运行一次.如果khungtaskd
未能在'n'秒内安排,则内核将声明软锁定.
我的问题是阻止khungtaskd
运行的原因是什么?我发现的一个 - 试图在中断环境中获取已经获得的自旋锁.导致软锁定的其他原因是什么?
我需要编写一个监视/监视程序来检查一系列应用程序
监测计划应该能够
VB.NET中的哪种API可以帮助我实现这一目标?
任何代码示例都会非常有用
我正在使用Watchdog来监控目录并使其与Dropbox保持同步.
我面临的情况是,每次从Dropbox下载文件时,都会触发上传事件,因为我需要写入Watchdog正在监视的目录.这是我正在使用的代码.
event_handler = UploadHandler.UploadHandler()
observer = Observer()
observer.schedule(event_handler, path=APP_PATH, recursive=True)
observer.start()
try:
while True:
# Apply download here
time.sleep(20)
except KeyboardInterrupt:
observer.stop()
observer.join()
Run Code Online (Sandbox Code Playgroud)
有没有办法在我应用下载时"暂停"观察者,并在我完成后再次"取消暂停"它?
我有一个系统服务.我想为此实施看门狗.它是这样的,
[Unit]
Description=Watchdog example service
[Service]
Type=notify
Environment=NOTIFY_SOCKET=/run/%p.sock
ExecStartPre=-/usr/bin/docker kill %p
ExecStartPre=-/usr/bin/docker rm %p
ExecStart=/usr/libexec/sdnotify-proxy /run/%p.sock /usr/bin/docker run \
--env=NOTIFY_SOCKET=/run/%p.sock \
--name %p pranav93/test_watchdogged python hello.py
ExecStop=/usr/bin/docker stop %p
Restart=on-success
WatchdogSec=30s
RestartSec=30s
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
根据文档,我要调用sd_notify("watchdog=1")
指定间隔的每一半(在这种情况下是它15s
).但我不知道如何在服务中调用该函数.帮助将受到高度赞赏.
我想在python中编写一个守护进程,它通过systemd启动.
我想使用Type = notify,这样我就不用做双叉魔法了.
根据文件:
此通知的参考实现由libsystemd-daemon.so提供
...如何用Python做到这一点?
我正在使用一个有点不可靠的(Qt/windows)应用程序,部分是由第三方为我们编写的(只是试图将责任转移到那里).他们的最新版本更稳定.有点.我们收到的崩溃报告越来越少,但是我们收到很多关于崩溃的报告并且永远不会回来.情况多种多样,由于我们可以收集的信息很少,我们无法重现这些问题.
理想情况下,我想创建某种看门狗,注意到应用程序已锁定,并提供向我们发送崩溃报告.好主意,但有问题:
看门狗如何知道该过程已挂起?据推测,我们会对应用程序进行检测,以便定期对看门狗说"一切正常",但是我们在哪里放置它以保证频繁发生,但不太可能出现在应用程序结束时的代码路径上锁定.
发生崩溃时看门狗应该报告什么信息?Windows有一个不错的调试api,所以我相信所有有趣的数据都是可访问的,但我不确定什么对于追踪问题有用.
我对有关Windows服务的看门狗定时器的另一个问题的答案非常感兴趣(见这里).答案说:
我还使用了另一个线程中运行的内部监视系统.该线程查看日志输出或切换事件等活动的主线程.如果未看到该活动,则认为该服务已挂起,我将关闭该服务.
在这种情况下,您可以配置窗口以自动重新启动已停止的服务,这可能会清除问题(只要它不是内部逻辑错误).
我使用的服务还包含写入日志的文本日志.此外,对于即将"睡了一会儿"的服务,我会记录下次唤醒的时间.我使用MTAIL来查看输出日志."
任何人都可以提供一些示例代码如何使用在另一个线程中运行的内部监视程序,因为我目前有一个任务来开发一个Windows服务,它将能够自动重启,以防它失败,挂断等.
我非常感谢你的帮助.
我正在编写一个简单的游戏并尝试在MSP430F5529微控制器上进行测试.我遇到的问题与看门狗定时器有关.
我写的代码会导致器件复位,这表示看门狗定时器问题.我假设我需要在我的主代码的第一行,某种预初始化代码之前停止它.我是否在正确的轨道上说,或者问题可能还在代码的其他部分?
为了更清楚,我的主要代码如下(简单形式):
就我而言,这段代码应该是正确的.
我们做的时候是什么意思echo V > /dev/watchdog
?一篇文章说它可以防止意外停止看门狗。我不清楚这个目的。
watchdog ×10
python ×3
linux ×2
systemd ×2
coreos ×1
crash-dumps ×1
embedded ×1
exception ×1
hang ×1
linux-kernel ×1
lockup ×1
monitoring ×1
msp430 ×1
notify ×1
parent-child ×1
python-2.7 ×1
restart ×1
scheduling ×1
service ×1
vb.net ×1
windows ×1