0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在Windows下使用 Supervisor 重新拉起崩溃的Python程序

科技绿洲 来源:Python实用宝典 作者:Python实用宝典 2023-10-21 11:23 次阅读

我们用Python定时跑一些自动化程序的时候会出现程序崩溃的情况。此时如果你本人不在电脑面前,或者没有留意到程序的崩溃,没有及时重新拉起程序,会造成或大或小的损失。

本文将教你如何在 Windows 下使用 Supervisor 重新拉起崩溃的Python程序。

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,可以访问这篇文章:超详细Python安装指南 进行安装。

**(可选1) **如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.

**(可选2) **此外,推荐大家用VSCode编辑器,它有许多的优点:Python 编程的最好搭档—VSCode 详细指南

请选择以下任一种方式输入命令安装依赖

  1. Windows 环境 打开 Cmd (开始-运行-CMD)。
  2. MacOS 环境 打开 Terminal (command+空格输入Terminal)。
  3. 如果你用的是 VSCode编辑器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install supervisor-win

如果你出现 “DLL load failed: 找不到指定的程序” 的报错,请重新安装pywin32:

pip install pywin32==223

2.编写自重启配置

接下来,你需要编写一个让你的Python程序自动运行,遇到报错自动重启的配置:

[program:cancel]
command=G:Anaconda3envs	dx_easytraderpython.exe D://CODE//tdx_easytrader//dataserver.py
    
[supervisord]
nodaemon=true

[supervisorctl]

前两行就是你的程序运行命令,在上面的例子中,program: 后面的关键词是你自定义的程序名,我的Python位于:

G:Anaconda3envstdx_easytraderpython.exe

我想要自重启的脚本位于:

D://CODE//tdx_easytrader//dataserver.py

此外,后面的三行是必须配置的,按我的默认写法即可。

编写完成后将配置命名为 supervisord.conf 保存于任何地方,可以是项目目录下,也可以是一个重要的配置目录文件夹。

然后执行以下命令启动 supervisord:

supervisord -c D:CODEtdx_easytradersupervisord.conf

注意 -c 参数后就是你的 supervisord.conf 的绝对路径。启动完毕显示:

2022-06-27 19:58:54,809 INFO process group added: 'cancel'
2022-06-27 19:58:54,810 INFO supervisord started with pid 28472
2022-06-27 19:58:54,815 INFO Spawned: 'cancel' with pid 27220
2022-06-27 19:58:55,830 INFO success: cancel entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)

意思是,supervisord 进程已经启动,pid为28472。我命名为cancel的Python进程也已经启动,pid为27220。我们在任务管理器中可以查看到这两个进程:

图片

3.测试

接下来我们测试一下它能否自动重启,让我们强杀 27220 这个进程,观察终端输出:

2022-06-27 19:58:54,815 INFO Spawned: 'cancel' with pid 27220
2022-06-27 19:58:55,830 INFO success: cancel entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2022-06-27 20:02:58,077 INFO exited: cancel (exit status 1; not expected)
2022-06-27 20:02:58,590 INFO Spawned: 'cancel' with pid 16640
2022-06-27 20:02:59,603 INFO success: cancel entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)

可以看到, 20:02:58秒的时候 cancel 程序意外退出(exit status 1; not expected),然后supervisord重新帮我们拉起了一个cancel程序,pid为16640:

图片

测试成功,程序成功自重启。

Supervisor不仅会把日志输出到终端中,在你运行命令的目录中,它还会生成supervisord.log, 这里面也保存了所有运行日志:

图片

当然,在上方我们supervisord的配置里,你也能配置日志输出位置、最大大小、分片数量等:

[supervisord]
logfile = /tmp/supervisord.log
logfile_maxbytes = 50MB
logfile_backups=10
loglevel = info
pidfile = /tmp/supervisord.pid
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • WINDOWS
    +关注

    关注

    3

    文章

    3440

    浏览量

    87144
  • 程序
    +关注

    关注

    114

    文章

    3631

    浏览量

    79543
  • Supervisor
    +关注

    关注

    0

    文章

    54

    浏览量

    12436
  • python
    +关注

    关注

    51

    文章

    4675

    浏览量

    83467
收藏 人收藏

    评论

    相关推荐

    windows7怎样安装whl文件(python

    windows7怎样安装whl文件(python
    发表于 01-23 13:51

    Windows 8.1中的安装崩溃

    Lovis,该程序的工作方式与Ronja相同。另外值得报道的是,我还尝试在Lovis上安装ISE 10.1。这没用。然后我尝试简单地从Ronja复制文件,在Windows 7安装它,然后启动'ISE
    发表于 12-06 10:36

    何在Windows 7安装VEE 9?

    有谁知道如何在Windows 7安装VEE 9?IO库一直告诉我,我将以管理员身份登录安装..即使我一直试图在管理员模式运行,我也会收到此消息。嗯?!VEE 9安装提供的消息说它只
    发表于 06-18 10:15

    何在Python中使用Selenium

    重新编写程序。  步骤9:创建一个新的PyDev模块。右键单击包>新建>其他> PyDev模块。  步骤10:编写您的Python代码。  使用Python在Selenium中创建测试
    发表于 09-08 18:17

    windows安装python 在linux安装python 在masOS安装python

    、Brython、Pyston等版本,有兴趣的读者可以自行了解。Windows环境可以在Python官方网站下载到PythonWindows安装
    发表于 06-11 16:59

    何在WINDOWS系统使用tensorflow来下围棋呢

    1、如何在WINDOWS系统安装tensorflow并使用tensorflow来下围棋呢 tensorflow0.12版本支持windows,需要
    发表于 06-02 16:17

    有谁知道wroom的开发板版本如何在拉起捆扎针的情况将引导加载程序置于串行模式?

    不需要拉起 GPIO2)有谁知道 wroom 的开发板版本如何在拉起捆扎针的情况将引导加载程序置于串行模式?我是否必须编写自定义引导加载
    发表于 03-01 07:17

    有谁知道wroom的开发板版本如何在拉起捆扎针的情况将引导加载程序置于串行模式?

    不需要拉起 GPIO2)有谁知道 wroom 的开发板版本如何在拉起捆扎针的情况将引导加载程序置于串行模式?我是否必须编写自定义引导加载
    发表于 04-13 07:00

    Windows崩溃居然还有彩蛋?Windows 10软件崩溃现在改成这样了

    软件崩溃Windows平台上可能是和蓝屏一样常见高频报错,通常,我们见到的是一个单调的对话框,文字是“Windows正在查找问题的解决方案”,接着是滚动的进度条,然后就没有然后了……
    发表于 07-03 16:58 5802次阅读

    微软推出Outlook桌面崩溃修复程序

    Microsoft的Windows Outlook电子邮件应用程序在启动时就开始崩溃,今天全世界的许多用户都在使用它。Office 365商业用户报告说,Outlook似乎在最近更新之后启动了,然后立即
    的头像 发表于 07-16 16:11 2600次阅读

    使用python开发windows的应用程序详细说明

    本人以前一直用的是C++,MFC ,毕业到了公司以后,公司用python 做流程,我顺便最近研究了一下用python 开发windows 应用程序的整个流程,大体如下:
    发表于 08-25 15:57 9次下载
    使用<b class='flag-5'>python</b>开发<b class='flag-5'>windows</b>的应用<b class='flag-5'>程序</b>详细说明

    微软修复Windows 10系统崩溃、系统重启循环等Bug

    更新还修复了系统崩溃、系统重启循环等Bug。 在本周早些时候更新的支持文档中,微软确认已经解决了NVMe SSD存储驱动器可能会使Windows 10崩溃的问题,并出现以下错误信息:DRIVER_VERIFIER_DMA_VIO
    的头像 发表于 12-03 09:14 1627次阅读

    何在python代码中使用HTTP代理IP

    何在python代码中使用HTTP代理IP。
    的头像 发表于 08-04 15:46 1039次阅读

    重新内存分配的改变让Firefox崩溃次数降低70%

    ,要了解为什么在 Windows 上运行的应用程序与其他操作系统相比更容易耗尽内存产生崩溃,就必须了解 Windows 如何处理内存。 所有
    的头像 发表于 11-29 15:08 501次阅读

    python调用windows命令

    Python是一种强大的编程语言,可以用于开发各种不同类型的应用程序。其中一个常见的用途是使用Python调用Windows命令来执行特定的任务。在本文中,我们将详细讨论如何使用
    的头像 发表于 11-29 14:34 483次阅读