<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          教你如何在 Windows 下讓崩潰的 Python 程序自重啟

          共 2935字,需瀏覽 6分鐘

           ·

          2022-06-29 13:03

          我們用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 詳細指南

          請選擇以下任一種方式輸入命令安裝依賴
          1. Windows 環(huán)境 打開 Cmd (開始-運行-CMD)。
          2. MacOS 環(huán)境 打開 Terminal (command+空格輸入Terminal)。
          3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.

          pip install supervisor-win

          如果你出現(xiàn) “DLL load failed: 找不到指定的程序” 的報錯,請重新安裝pywin32:

          pip install pywin32==223

          2.編寫自重啟配置


          接下來,你需要編寫一個讓你的Python程序自動運行,遇到報錯自動重啟的配置:

          [program:cancel]
          command=G:\\Anaconda3\\envs\\tdx_easytrader\\python.exe D://CODE//tdx_easytrader//dataserver.py
              
          [supervisord]

          nodaemon=true

          [supervisorctl]

          前兩行就是你的程序運行命令,在上面的例子中,program: 后面的關鍵詞是你自定義的程序名,我的Python位于: 

          G:\Anaconda3\envs\tdx_easytrader\python.exe

          我想要自重啟的腳本位于:

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

          此外,后面的三行是必須配置的,按我的默認寫法即可。

          編寫完成后將配置命名為 supervisord.conf 保存于任何地方,可以是項目目錄下,也可以是一個重要的配置目錄文件夾。

          然后執(zhí)行以下命令啟動 supervisord:

          supervisord -c D:\CODE\tdx_easytrader\supervisord.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

          Supervisord 還有許多其他的功能,有興趣的同學可以訪問他們官網(wǎng)查詢:

          http://supervisord.org/introduction.html

          我們的文章到此就結(jié)束啦,如果你喜歡今天的Python 實戰(zhàn)教程,請持續(xù)關注Python實用寶典。

          有任何問題,可以在公眾號后臺回復:加群,回答相應紅字驗證信息,進入互助群詢問。

          原創(chuàng)不易,希望你能在下面點個贊和在看支持我繼續(xù)創(chuàng)作,謝謝!

          點擊下方閱讀原文可獲得更好的閱讀體驗

          Python實用寶典 (pythondict.com)
          不只是一個寶典
          歡迎關注公眾號:Python實用寶典

          瀏覽 117
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久久久成人高清视频 | 欧美性生交大片免费看A片免费 | 少妇久久精品 | 99精品欧美一区二区 | 亚训Av无码专区在 |