python - Python 多处理。检查进程是否正在运行
问题描述
如果十秒钟后发生这种情况,我如何打印“进程超时并终止”?
如果没有终止,我如何打印“进程成功完成”?
import multiprocessing
import time
def hello():
#process to be terminated after ten seconds
if __name__ == '__main__':
proc = multiprocessing.Process(target=hello)
proc.start()
time.sleep(10)
proc.terminate()
解决方案
与其休眠,不如通过超时“加入”进程。如果该过程在 10 秒内退出,您将立即收到通知。否则,10 秒后您可以检查退出代码。我在此示例中添加了第三种非零退出代码的情况,以解决一般故障。
import multiprocessing
import time
def hello():
#process to be terminated after ten seconds
if __name__ == '__main__':
proc = multiprocessing.Process(target=hello)
proc.start()
proc.join(10)
if proc.exitcode is None:
proc.terminate()
proc.join(1)
if proc.exitcode is None:
proc.kill()
print("process timed out and terminated")
elif proc.exitcode == 0:
print("process completed successfully")
else:
print("unexpected error")
在父母决定一切都出错后,有一个窗口可以让孩子正确退出。如果这是一个问题,你可以做一些更复杂的事情。
推荐阅读
- docker - 测试重启策略 - 如何使容器崩溃以使其重启
- c# - int.ToString(format) 不插入 " 文字
- c++ - 如何在 VisualStudio 中自动更改函数的参数序列
- ios - 我们如何添加可从其他应用程序访问的应用程序,例如whatsapp 和linkedin 中的gif?有什么好的教程可以学习吗?
- c# - 将 c++ 转换为 c# 的结构数组
- python - 尝试向图像添加文本并使用 PIL 制作 gif
- ffmpeg - 如何使用 && 或 | 运行多个 ffmpeg 命令
- uppaal - 如何在 UPPAAL 中将双精度值转换为整数值?
- javascript - 如何使用在 windows7 上运行的 Docker(Docker 工具箱)重新映射端口?
- assembly - SIGSEGV 处理程序仅工作 1 次。为什么?