首页 > 解决方案 > 与直接从 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,并没有发现任何性能差异。因此,仅针对远程连接观察到性能差异。

这是性能上的显着差异。现在,我无法弄清楚是什么原因造成的。任何方向将不胜感激。

标签: pythonmysql-python

解决方案


好吧,在花了更多时间并试图找出两个执行环境之间的差异之后,才意识到我犯的一个愚蠢的错误导致了问题。

我在执行 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 地址和主机名的映射来应用解决方法。奇迹般有效


推荐阅读