我們用Python定時跑一些自動化程序的時候會出現(xiàn)程序崩潰的情況。此時如果你本人不在電腦面前,或者沒有留意到程序的崩潰,沒有及時重新拉起程序,會造成或大或小的損失。
本文將教你如何在 Windows 下使用 Supervisor 重新拉起崩潰的Python程序。
1.準備
開始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細Python安裝指南 進行安裝。
**(可選1) **如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda:Python數(shù)據(jù)分析與挖掘好幫手—Anaconda,它內(nèi)置了Python和pip.
**(可選2) **此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點:Python 編程的最好搭檔—VSCode 詳細指南。
請選擇以下任一種方式輸入命令安裝依賴 :
- Windows 環(huán)境 打開 Cmd (開始-運行-CMD)。
- MacOS 環(huán)境 打開 Terminal (command+空格輸入Terminal)。
- 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install supervisor-win
如果你出現(xiàn) “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 保存于任何地方,可以是項目目錄下,也可以是一個重要的配置目錄文件夾。
然后執(zhí)行以下命令啟動 supervisord:
supervisord -c D:CODEtdx_easytradersupervisord.conf
注意 -c 參數(shù)后就是你的 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 進程已經(jīng)啟動,pid為28472。我命名為cancel的Python進程也已經(jīng)啟動,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的配置里,你也能配置日志輸出位置、最大大小、分片數(shù)量等:
[supervisord]
logfile = /tmp/supervisord.log
logfile_maxbytes = 50MB
logfile_backups=10
loglevel = info
pidfile = /tmp/supervisord.pid
-
WINDOWS
+關注
關注
4文章
3598瀏覽量
90709 -
程序
+關注
關注
117文章
3817瀏覽量
82180 -
Supervisor
+關注
關注
0文章
54瀏覽量
12730 -
python
+關注
關注
56文章
4822瀏覽量
85876
發(fā)布評論請先 登錄
相關推薦
Windows 8.1中的安裝崩潰
在windows下安裝python 在linux下安裝python 在masOS下安裝python
如何在WINDOWS系統(tǒng)下使用tensorflow來下圍棋呢
有誰知道wroom的開發(fā)板版本如何在不拉起捆扎針的情況下將引導加載程序置于串行模式?
有誰知道wroom的開發(fā)板版本如何在不拉起捆扎針的情況下將引導加載程序置于串行模式?
Windows CE下GPIO驅(qū)動程序的設計與應用
如何在DOS下安裝Windows Me
微軟推出Outlook桌面崩潰修復程序
如何在Linux環(huán)境下實現(xiàn)Python環(huán)境的搭建

使用python開發(fā)windows的應用程序詳細說明

評論