Python exe速度太慢

问题描述 投票:0回答:1

我制作了一个python程序,可从csv读取数据,对其进行排序并使用Plotly显示图形。当我使用.py文件进行测试时,它的运行速度非常快,然后,当我将其转换为.exe时,它开始变慢。这是我的代码

print("Importando modulos")
import os
import pandas as pd
import numpy as np
import glob
import time
import gc
from datetime import datetime
from tkinter import * 
from tkinter import ttk
import tkinter.messagebox
import plotly.express as px
print("Modulos Importados")
try:
    start_time = time.time()
    path = os.path.dirname(os.path.abspath("E3_converter.py"))
    def grafic_interface(dicc):
        def show(event):
            df=dicc[event.widget['text']]
            fig = px.line(df, x='Time', y=['B003.AQ',"B004.AQ"])
            fig.show()
        form=Tk()
        form.title("Analisis de Sistema Monitoreado")
        form.iconbitmap("D:\Escritorio\pruebas\e3solutionsfinalsolo.ico")
        form['background']="#1500b0"
        nombre = Label(text='FECHAS\n', fg = '#ffffff',bg = '#1500b0', font = 'Helvetica 16 bold')
        nombre.grid(row=1, column=2)
        nombre.place(x=150,y=10)
        cont=2
        i=0
        for date in dicc:
            if cont%2==0:
                data=Button(form,text=str(date))
                data.place(x=50,y=70+(30*i))           
                data.bind("<Button-1>", show)
            else:
                data=Button(form,text=str(date))
                data.place(x=250,y=70+(30*i)) 
                i+=1.2
                data.bind("<Button-1>", show)
            cont+=1
        y=(int(cont)/2)*60
        form.geometry("400x"+str(int(y)))
        print("--- %s seconds ---" % (time.time() - start_time)) 
        form.mainloop()

    LIST_CSV=[]
    files=list(glob.glob(path+"\\*.csv"))
    if len(files)>0:
        df_one=pd.read_csv(files[0])
        LIST_CSV.append(df_one)
        print("Recolectando datos")
        for i in range(1,len(files)):
            df_temp=pd.read_csv(files[i])
            LIST_CSV.append(df_temp)
        print("Uniendo datos")
        df=pd.concat(LIST_CSV)
        df['Time']= pd.to_datetime(df['Time']) 
        print("Ordenando datos")
        df.sort_values(by='Time')
        global_dates=list(df.Time.dt.strftime('%d-%m-%Y').unique())
        while (global_dates.count(np.nan)): 
            global_dates.remove(np.nan)
        global_dates.sort(key=lambda date: datetime.strptime(date, "%d-%m-%Y"))
        GLOBAL_DICT={} 
        for date in global_dates:
            print("Realizando query fecha:   "+str(date))
            datetime_object = datetime.strptime(str(date), '%d-%m-%Y')
            data=df.loc[(df["Time"].dt.month==datetime_object.month) & (df["Time"].dt.day==datetime_object.day)]
            GLOBAL_DICT[str(date)]=data
        grafic_interface(GLOBAL_DICT)          
    else:
        print("No existe ningun archivo de extension csv en este folder")
except:
    time.sleep(40)

我添加了打印以查看何时开始执行。我的输出看起来像这样enter image description here

大约需要10分钟!!!给我看第一张照片

python performance exe
1个回答
0
投票

当可执行文件首次启动时,它必须加载您在代码开始时编写的所有这些模块。这极大地减慢了您的程序的速度,并导致它花费了额外的时间来加载。但是,当您加载.py文件时,它改用缓存的.pyc文件,因此执行速度更快。

一个简单的解决方法是仅导入所需的对象,如下所示:

from time import sleep

...

sleep(1000) # Instead of time.sleep(1000)
© www.soinside.com 2019 - 2024. All rights reserved.