python - 与直接从 pycharm IDE 相比,在 Windows 10 上使用 pyinstaller 构建的 exe 连接到远程 mariadb 数据库时性能较慢
问题描述
与直接从 pycharm IDE 相比,在 Windows 10 上使用 pyinstaller 构建的 .exe 连接到远程 mariadb 数据库时,我面临性能缓慢的问题。
所以,下面是示例代码:
import MySQLdb
try:
conn = MySQLdb.connect(host=database_host, port=database_port, user=database_user,
passwd=database_password, db=database_name)
except MySQLdb.OperationalError as e:
# error message
print('Error: ', e)
如果我从 pycharm运行此代码,则与远程 mariadb 数据库的连接时间约为 100 毫秒。
如果我使用Windows 可执行文件(使用 pyinstaller 构建的 .exe)运行相同的代码,则相同远程 mariadb 数据库的执行时间大约为2 秒。
pyinstaller 命令:
pyinstaller -y --add-data "C:\path\to\data" --icon="C:\path\to\icon.ico" --hidden-import babel.numbers package.path.MainModule.py
我在本地windows机器上安装了maridb,并没有发现任何性能差异。因此,仅针对远程连接观察到性能差异。
这是性能上的显着差异。现在,我无法弄清楚是什么原因造成的。任何方向将不胜感激。
解决方案
好吧,在花了更多时间并试图找出两个执行环境之间的差异之后,才意识到我犯的一个愚蠢的错误导致了问题。
我在执行 using .exe 时使用了主机名,而在执行 pycharm 时我使用的是直接 IP 地址。
因此,需要时间来解析主机名。
这是我找到它的方法:从 python venv 窗体 windows 命令行执行相同的程序。测试结果和pycharm一样。
现在,我打印了 database_host 和 database_port 的值。.exe 和 pycharm(或命令行)之间的唯一区别是 database_host name 的值是 .exe 的主机名和 pycharm 中的 ip 地址。
因此,我在运行 .exe 时更改了配置以使用 IP 地址,现在的性能相同。
更新: 我现在通过在 C:\widows32\drivers\etc\hosts 文件中添加 IP 地址和主机名的映射来应用解决方法。奇迹般有效
推荐阅读
- java - 带有数组的新枚举
- node.js - Angular 到 Node + Express.js http.post() 停止:状态 204 无内容。疑似 CORS 预检选项
- functional-programming - 获取列表的第一个元素作为 Maybe vs Maybe 元素
- c# - 是否有任何框架或组件可以在 EF Core/ASP.Net Core 中构建复杂类型?
- wordpress - 重新加载时的自定义 Wordpress 模板页面不显示任何内容,但源代码都在那里
- opengl - 在OpenGL中旋转后沿着它的前轴平移相机?
- sql - 如何使用 postgresql 转换表
- php - .htaccess 从身份验证中排除特定文件
- linux - Docker:附加到特定的 bash
- excel - 使用 VBA 更新表的行