国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

用Python實現服務器中只重載被修改的進程的方法

來源:懂視網 責編:小采 時間:2020-11-27 14:41:44
文檔

用Python實現服務器中只重載被修改的進程的方法

用Python實現服務器中只重載被修改的進程的方法:現在,我們已經把一個Web App的框架完全搭建好了,從后端的API到前端的MVVM,流程已經跑通了。 在繼續工作前,注意到每次修改Python代碼,都必須在命令行先Ctrl-C停止服務器,再重啟,改動才能生效。 在開發階段,每天都要修改、保存幾十次代碼,每次保存都手
推薦度:
導讀用Python實現服務器中只重載被修改的進程的方法:現在,我們已經把一個Web App的框架完全搭建好了,從后端的API到前端的MVVM,流程已經跑通了。 在繼續工作前,注意到每次修改Python代碼,都必須在命令行先Ctrl-C停止服務器,再重啟,改動才能生效。 在開發階段,每天都要修改、保存幾十次代碼,每次保存都手

現在,我們已經把一個Web App的框架完全搭建好了,從后端的API到前端的MVVM,流程已經跑通了。

在繼續工作前,注意到每次修改Python代碼,都必須在命令行先Ctrl-C停止服務器,再重啟,改動才能生效。

在開發階段,每天都要修改、保存幾十次代碼,每次保存都手動來這么一下非常麻煩,嚴重地降低了我們的開發效率。有沒有辦法讓服務器檢測到代碼修改后自動重新加載呢?

Django的開發環境在Debug模式下就可以做到自動重新加載,如果我們編寫的服務器也能實現這個功能,就能大大提升開發效率。

可惜的是,Django沒把這個功能獨立出來,不用Django就享受不到,怎么辦?

其實Python本身提供了重新載入模塊的功能,但不是所有模塊都能被重新載入。另一種思路是檢測www目錄下的代碼改動,一旦有改動,就自動重啟服務器。

按照這個思路,我們可以編寫一個輔助程序pymonitor.py,讓它啟動wsgiapp.py,并時刻監控www目錄下的代碼改動,有改動時,先把當前wsgiapp.py進程殺掉,再重啟,就完成了服務器進程的自動重啟。

要監控目錄文件的變化,我們也無需自己手動定時掃描,Python的第三方庫watchdog可以利用操作系統的API來監控目錄文件的變化,并發送通知。我們先用easy_install安裝:

$ easy_install watchdog

利用watchdog接收文件變化的通知,如果是.py文件,就自動重啟wsgiapp.py進程。

利用Python自帶的subprocess實現進程的啟動和終止,并把輸入輸出重定向到當前進程的輸入輸出中:

#!/usr/bin/env python
import os, sys, time, subprocess

from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

def log(s):
 print '[Monitor] %s' % s

class MyFileSystemEventHander(FileSystemEventHandler):
 def __init__(self, fn):
 super(MyFileSystemEventHander, self).__init__()
 self.restart = fn

 def on_any_event(self, event):
 if event.src_path.endswith('.py'):
 log('Python source file changed: %s' % event.src_path)
 self.restart()

command = ['echo', 'ok']
process = None

def kill_process():
 global process
 if process:
 log('Kill process [%s]...' % process.pid)
 process.kill()
 process.wait()
 log('Process ended with code %s.' % process.returncode)
 process = None

def start_process():
 global process, command
 log('Start process %s...' % ' '.join(command))
 process = subprocess.Popen(command, stdin=sys.stdin, stdout=sys.stdout, stderr=sys.stderr)

def restart_process():
 kill_process()
 start_process()

def start_watch(path, callback):
 observer = Observer()
 observer.schedule(MyFileSystemEventHander(restart_process), path, recursive=True)
 observer.start()
 log('Watching directory %s...' % path)
 start_process()
 try:
 while True:
 time.sleep(0.5)
 except KeyboardInterrupt:
 observer.stop()
 observer.join()

if __name__ == '__main__':
 argv = sys.argv[1:]
 if not argv:
 print('Usage: ./pymonitor your-script.py')
 exit(0)
 if argv[0]!='python':
 argv.insert(0, 'python')
 command = argv
 path = os.path.abspath('.')
 start_watch(path, None)

一共50行左右的代碼,就實現了Debug模式的自動重新加載。用下面的命令啟動服務器:

$ python pymonitor.py wsgiapp.py

或者給pymonitor.py加上可執行權限,啟動服務器:

$ ./pymonitor.py wsgiapp.py

在編輯器中打開一個py文件,修改后保存,看看命令行輸出,是不是自動重啟了服務器:

$ ./pymonitor.py wsgiapp.py 
[Monitor] Watching directory /Users/michael/Github/awesome-python-webapp/www...
[Monitor] Start process python wsgiapp.py...
...
INFO:root:application (/Users/michael/Github/awesome-python-webapp/www) will start at 0.0.0.0:9000...
[Monitor] Python source file changed: /Users/michael/Github/awesome-python-webapp/www/apis.py
[Monitor] Kill process [2747]...
[Monitor] Process ended with code -9.
[Monitor] Start process python wsgiapp.py...
...
INFO:root:application (/Users/michael/Github/awesome-python-webapp/www) will start at 0.0.0.0:9000...
Try

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

用Python實現服務器中只重載被修改的進程的方法

用Python實現服務器中只重載被修改的進程的方法:現在,我們已經把一個Web App的框架完全搭建好了,從后端的API到前端的MVVM,流程已經跑通了。 在繼續工作前,注意到每次修改Python代碼,都必須在命令行先Ctrl-C停止服務器,再重啟,改動才能生效。 在開發階段,每天都要修改、保存幾十次代碼,每次保存都手
推薦度:
標簽: 修改 程序 服務器
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 最新国产在线视频 | 国产欧美色图 | 欧美天天爽| 国产精品久久久久久久久鸭 | 国产精品久久久久国产精品 | 国产91免费视频 | 欧美高清一区二区三区欧美 | 日韩a在线播放 | 欧美高清a| 欧美精品一区二区三区免费观看 | 亚洲国产精品久久久久 | 在线观看亚洲欧美 | 国产成人精品视频在放 | 精品日韩欧美一区二区三区 | 国产一区二区三区在线视频 | 国产激情一区二区三区 | 欧美第5页 | 欧美高清在线精品一区二区不卡 | 日韩欧美一区二区三区在线播放 | 久久香蕉热 | 另类专区 亚洲 | 国产成人免费高清激情明星 | 久久国产精品一区二区三区 | 欧美精品国产日韩综合在线 | 91精品欧美一区二区三区 | 国产精品三级一区二区 | 亚洲欧洲日韩在线 | 激情另类国内一区二区视频 | 亚洲福利在线观看 | 亚洲欧美日韩专区 | 国内精品自产拍在线观看91 | 国产乱来视频 | 亚洲成色999久久网站 | 亚洲色图欧美色 | 欧美啊v在线观看 | 欧美日韩精品一区二区 | 成人精品视频一区二区在线 | 2021国产精品自拍 | 国产精品久久久久9999 | 特黄日韩免费一区二区三区 | 国产欧美久久一区二区 |