Kirjoittaja Aihe: python-ohjelman hidas käynnistyminen  (Luettu 1702 kertaa)

teele

  • Käyttäjä
  • Viestejä: 688
    • Profiili
python-ohjelman hidas käynnistyminen
« : 27.01.21 - klo:12.01 »
Kokeilin pientä python-ohjelmaa, jossa voi vieritellä taulukon rivejä ja sarakkeita. Ohjelma näyttää toimivan, mutta sen käynnistyminen kestää omituisen kauan. Ohjelma on tällainen

Koodia: [Valitse]

import tkinter as tk

LABEL_BG = "#ccc"  # Light gray.
ROWS, COLS = 100, 11  # Size of grid.
ROWS_DISP = 6  # Number of rows to display.
COLS_DISP = 8  # Number of columns to display.

class MyApp(tk.Tk):
    def __init__(self, title="Sample App", *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

        self.title(title)
        self.configure(background="Gray")
        self.columnconfigure(0, weight=1)
        self.rowconfigure(0, weight=1)

        master_frame = tk.Frame(self, bg="Light Blue", bd=3, relief=tk.RIDGE)
        master_frame.grid(sticky=tk.NSEW)
        master_frame.columnconfigure(0, weight=1)

        label1 = tk.Label(master_frame, text="Frame1 Contents", bg=LABEL_BG)
        label1.grid(row=0, column=0, pady=5, sticky=tk.NW)

        frame1 = tk.Frame(master_frame, bg="Green", bd=2, relief=tk.GROOVE)
        frame1.grid(row=1, column=0, sticky=tk.NW)

        cb_var1 = tk.IntVar()
        checkbutton1 = tk.Checkbutton(frame1, text="StartCheckBox", variable=cb_var1)
        checkbutton1.grid(row=0, column=0, padx=2)

        label2 = tk.Label(master_frame, text="Frame2 Contents", bg=LABEL_BG)
        label2.grid(row=2, column=0, pady=5, sticky=tk.NW)

        # Create a frame for the canvas and scrollbar(s).
        frame2 = tk.Frame(master_frame)
        frame2.grid(row=3, column=0, sticky=tk.NW)

        # Add a canvas in that frame.
        canvas = tk.Canvas(frame2, bg="Yellow")
        canvas.grid(row=0, column=0)

        # Create a vertical scrollbar linked to the canvas.
        vsbar = tk.Scrollbar(frame2, orient=tk.VERTICAL, command=canvas.yview)
        vsbar.grid(row=0, column=1, sticky=tk.NS)
        canvas.configure(yscrollcommand=vsbar.set)

        # Create a horizontal scrollbar linked to the canvas.
        hsbar = tk.Scrollbar(frame2, orient=tk.HORIZONTAL, command=canvas.xview)
        hsbar.grid(row=1, column=0, sticky=tk.EW)
        canvas.configure(xscrollcommand=hsbar.set)

        # Create a frame on the canvas to contain the buttons.
        buttons_frame = tk.Frame(canvas, bg="Red", bd=2)

        # Add the buttons to the frame.
        for i in range(1, ROWS+1):
            for j in range(1, COLS+1):
                button = tk.Button(buttons_frame, padx=7, pady=7, relief=tk.RIDGE,
                                   text="[%d, %d]" % (i, j))
                button.grid(row=i, column=j, sticky='news')

        # Create canvas window to hold the buttons_frame.
        canvas.create_window((0,0), window=buttons_frame, anchor=tk.NW)

        buttons_frame.update_idletasks()  # Needed to make bbox info available.
        bbox = canvas.bbox(tk.ALL)  # Get bounding box of canvas with Buttons.
        #print('canvas.bbox(tk.ALL): {}'.format(bbox))

        # Define the scrollable region as entire canvas with only the desired
        # number of rows and columns displayed.
        w, h = bbox[2]-bbox[1], bbox[3]-bbox[1]
        dw, dh = int((w/COLS) * COLS_DISP), int((h/ROWS) * ROWS_DISP)
        canvas.configure(scrollregion=bbox, width=dw, height=dh)

        label3 = tk.Label(master_frame, text="Frame3 Contents", bg=LABEL_BG)
        label3.grid(row=4, column=0, pady=5, sticky=tk.NW)

        frame3 = tk.Frame(master_frame, bg="Blue", bd=2, relief=tk.GROOVE)
        frame3.grid(row=5, column=0, sticky=tk.NW)

        cb_var2 = tk.IntVar()
        checkbutton2 = tk.Checkbutton(frame3, text="EndCheckBox", variable=cb_var2)
        checkbutton2.grid(row=0, column=0, padx=2)


if __name__ == "__main__":
    app = MyApp("Scrollable Canvas")
    app.mainloop()


Koneeni on aika vanha pentium-laite, mutta muistia on 8 Gt.

Jos ohjelmaa kokeilee windows-koneessa, mitään poikkeavaa ei havaitse.

Olisiko asialle joku selitys ja voisiko käynnistymisen saada normaalinopeuksiseksi jotain säätämällä.

Muok.

System monitori ei näytä koko odostusajan kestävää poikkeuksellisen isoa kuormaa, vain lyhyt melkein 100% :iin menevä kohouma näkyy ja kummatkin suorittimet nousevat suunnilleen saman käyrän mukaan.
« Viimeksi muokattu: 27.01.21 - klo:13.11 kirjoittanut teele »

Lepotila zZ

  • Käyttäjä
  • Viestejä: 332
    • Profiili
Vs: python-ohjelman hidas käynnistyminen
« Vastaus #1 : 27.01.21 - klo:12.27 »
Käynnistyi minun koneessani hyvin nopeasti. (Ryzen 5 3600, 16GB, NVMe SSD. Ubuntu 20.10)

SuperOscar

  • Käyttäjä
  • Viestejä: 3862
  • Tänään täällä, huomenna poissa
    • Profiili
    • Legisign.org
Vs: python-ohjelman hidas käynnistyminen
« Vastaus #2 : 27.01.21 - klo:13.43 »
Minulla myös käynnistyi tosi vilkkaasti, vaikka kone ei ole mikään supertyöasema (Intel Core i5-5300U @ 2.30 GHz).

Hidas levy? Vai peräti NFS tai vastaava verkkojako?
Debian GNU/Linux 11 (pöytäkone 1 & kannettavat 1 & 3), openSUSE Tumbleweed (pöytäkone 2), openSUSE Leap 15.4 (kannettava 2), Ubuntu 20.04 LTS (RPi 2 B), LibreELEC 10 (RPi 4 B)

teele

  • Käyttäjä
  • Viestejä: 688
    • Profiili
Vs: python-ohjelman hidas käynnistyminen
« Vastaus #3 : 27.01.21 - klo:18.36 »

Ei näköjään riipu koneesta hdistävä tekijä hitaalle käynnistymiselle näyttää olevan Ubuntu 18.04. Toisessa on pentium ja toisessa i5.

Viimeisten kokeilujen mukaan olisi jopa niin, että komento

python3 kk16.py

jättää pääteikkunan pysähtyneeseen tilaan ja vasta näppäimen (ctrl) paineleminen käynnistää python-ohjelman....???

Jossain vaiheessa versiopäivityskin pitää tehdä, mutta asia herättää uteliaisuutta.


nm

  • Käyttäjä
  • Viestejä: 15077
    • Profiili
Vs: python-ohjelman hidas käynnistyminen
« Vastaus #4 : 27.01.21 - klo:19.30 »
Minulla on myös hidas 18.04:ssä.

Näyttää liittyvän ibus-daemoniin joka on vastuussa näppäimistösyötteen tulkitsemisesta GNOME-työpöydällä. Se on tosin vaihdettavissa esimerkiksi im-config -työkalulla ximiin, mutta en tiedä toimiiko työpöytä kaikilta osin oikein sen kanssa. Ibus-daemoninkuorma nousee sataan prosenttiin tkinterin alustaessa ikkunaa, ja näppäimistö jumittaa yhä enemmän uusilla käynnistyskerroilla.

Löysin ongelmasta yhden bugiraportin: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2674
« Viimeksi muokattu: 27.01.21 - klo:19.32 kirjoittanut nm »

ilkant

  • Käyttäjä
  • Viestejä: 939
  • Kubuntu
    • Profiili
Vs: python-ohjelman hidas käynnistyminen
« Vastaus #5 : 03.02.21 - klo:12.51 »
Tosi nopeasti käynnistyi HP 8200:lla. 3.10 GHz 8 GB ja SATA-3 levy, ei SDD. Kubuntu 18.04.