为了赶新潮,把 Python 升级到了最新的 3.6 版,结果发现 flask 程序无法运行了。查了一些原因,原来是 socketserver 中缺少 ForkingMixIn 所致。
查看了相关文档,原在Python 3.6 中只有 Posix 系统中 socketserver 有 ForkingMixIn 类,而 Windows 下无此类。
为了保障程序的运行,要么退回到 3.5 ,要么修改程序。回退无疑是很麻烦的,因为有许多库要重装,许多参数要重新配置。
Windows 系统中不存在 fork 相关机制,故 ForkingMixIn 应该无用。注释掉相关的引用和调用就可以了。经过查证相关代码,只有 werkzeug 模块的 servers 模块需要使用 ForkingMixIn 类。修改很简单,只要在wekzeug的 servers 模块中删除 ForkingMinxIn 就可以了。
但这一修改有个致命的缺陷,这个库如果以后升级会重新造成程序运行失败。
经过研究,找到一个更简单的方法,那就是在自己程序的最前面对 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 环境下,使用 ThreadingMixIn 来替代 ForkingMixIn 。经过这样一番修改,程序顺利运行。
网友评论