Python 2.7与11代Intel酷睿i9兼容性问题(Maya 2.7.11下MySQL连接崩溃)
该问题本质是低于2.7.15版本的Python 2.7内置的旧版OpenSSL依赖库,与11代及以后Intel酷睿处理器新增的AVX2指令集存在兼容性冲突,pymysql建立连接时的SSL握手逻辑触发了底层C层面的非法指令异常,直接导致进程崩溃,Python层无法捕获报错,因此无任何输出直接退出。
系统Python升级到2.7.18后问题解决,就是因为该版本已经修复了对应的CPU兼容性问题。
方案1:修改pymysql连接参数,规避触发异常的加密逻辑
调整现有连接代码,新增两个参数,关闭SSL连接并指定旧版身份认证插件:import pymysql connection = pymysql.connect( host='myHostname', user='myUserName', password='myPassword', db='databaseName', cursorclass=pymysql.cursors.DictCursor, ssl=False, auth_plugin='mysql_native_password' )若数据库强制要求SSL连接,请勿使用该方案,优先选择方案2或方案3
方案2:配置系统环境变量禁用OpenSSL AVX指令集
仅需在两台问题设备上添加系统环境变量即可,无需修改代码或Maya内置文件:- 打开「系统属性-高级-环境变量」
- 新建系统变量,变量名填
OPENSSL_ia32cap,变量值填~0x20000000 - 重启Maya后生效
该方案会强制OpenSSL跳过AVX指令调用,从底层规避兼容性冲突,对现有业务代码无侵入。
方案3:替换Maya内置Python的加密依赖库
将系统Python 2.7.18安装目录下DLLs文件夹中的_ssl.pyd、hashlib.pyd,以及同级目录下的libeay32.dll、ssleay32.dll文件,复制替换到Maya安装路径下的Python\DLLs文件夹中,替换原有旧版本文件。
该方案相当于把Maya内置Python的加密底层组件替换为修复了CPU兼容性的版本,所有原有代码无需调整即可正常运行。方案4:进程间通信绕开Maya Python环境
在问题设备上用已经修复问题的系统Python 2.7.18跑一个本地后台RPC服务,承接所有数据库操作请求,Maya内的代码仅需要通过本地socket/xmlrpc向服务端发送请求、接收结果,完全不在Maya Python环境中调用pymysql。
该方案完全不修改Maya的内置环境与现有业务逻辑,稳定性最高,适合不想改动Maya配置的场景。
内容的提问来源于stack exchange,提问作者tiektieco

