為了趕新潮,把 Python 升級到了最新的 3.6 版,結(jié)果發(fā)現(xiàn) flask 程序無法運行了。查了一些原因,原來是 socketserver 中缺少 ForkingMixIn 所致踪蹬。
查看了相關(guān)文檔,原在Python 3.6 中只有 Posix 系統(tǒng)中 socketserver 有 ForkingMixIn 類臣咖,而 Windows 下無此類跃捣。
為了保障程序的運行,要么退回到 3.5 夺蛇,要么修改程序疚漆。回退無疑是很麻煩的刁赦,因為有許多庫要重裝娶聘,許多參數(shù)要重新配置。
Windows 系統(tǒng)中不存在 fork 相關(guān)機制甚脉,故 ForkingMixIn 應(yīng)該無用丸升。注釋掉相關(guān)的引用和調(diào)用就可以了。經(jīng)過查證相關(guān)代碼牺氨,只有 werkzeug 模塊的 servers 模塊需要使用 ForkingMixIn 類狡耻。修改很簡單墩剖,只要在wekzeug的 servers 模塊中刪除 ForkingMinxIn 就可以了。
但這一修改有個致命的缺陷夷狰,這個庫如果以后升級會重新造成程序運行失敗涛碑。
經(jīng)過研究,找到一個更簡單的方法孵淘,那就是在自己程序的最前面對 socketserver 進行破解,增加一個假的 ForkingMixIn 類歹篓。以便于后面的程序可以順序運行瘫证。這樣,程序版本更容易控制一些庄撮。
具體代碼如下:
import os
if os.name!='posix':
# 升級到 Python 3.6以后背捌,Windows 版本的 socketserver 模塊沒有 ForkingMixIn,
# 故需要使用以下代碼進行修正
import socketserver
socketserver.ForkingMixIn=socketserver.ThreadingMixIn
from flask import Flask
app=Flask(__name__)
上述代碼在 Windows 環(huán)境下洞斯,使用 ThreadingMixIn 來替代 ForkingMixIn 毡庆。經(jīng)過這樣一番修改,程序順利運行烙如。