Jadual Kandungan
Jawapan betul
Asal
Terjemahan (Terjemahan Google):
Rumah pembangunan bahagian belakang Tutorial Python Pemprosesan berbilang daripada tkinter panggil balik

Pemprosesan berbilang daripada tkinter panggil balik

Feb 22, 2024 pm 02:10 PM

来自回调 tkinter 的多处理

Kandungan soalan

Masalahnya ialah apabila saya ingin mencetuskan proses "multiprocessing" daripada tkinter panggilan balik (khususnya pengikatan fungsi tkinter). Ralat bermula di sini:

file“c:usersusuariodownloadsengine_controller_lsextracttextfuncionesreproductor.py”,第 598 行,在 __init__ p.start() 文件“c:program filespython311libmultiprocessingprocess .py”,第 121 行,开始 self._popen = self._popen(self) ^^^^^^^^^^^^^^^^^^ 文件“c:program filespython311libmultiprocessing context.py”,第 224 行,在 _popen 中返回 _default_context.get_context().process._popen(process_obj) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件“c:program filespython311libmultiprocessingcontext.py”,第 336 行,在 _popen 返回 popen(process_obj) ^^^^^^^^^^^^^^^^^^^ 文件 "c:program filespython311libmultiprocessingpopen_spawn_win32.py",第 95 行,在 __init__duction.dump(process_obj, to_child) 文件“c:program filespython311libmultiprocessingreduction.py”中,第 60 行,在转储 forkingpickler(file, protocol).dump(obj) 中 typeerror: 无法 pickle ' _tkinter.tkapp'对象

main.py

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

from reproductor import mediaplayer

 

def item_selected(event):

    """

    evento invocado cuando el contenido de una carpeta es abierto.

    """

    item_seleccionado = arbol.selection()

    item = arbol.item(item_seleccionado)

    print(item)

     

    #extraer la ruta del archivo y si encuentra espacios unirlos

    ruta = ""

    for element in item["values"]:

        ruta += element + " "

 

     

    #iniciacion del video

    global reproductor_video

 

    # cerrar el video para que no se abra en multiples ventanas

    if reproductor_video is not none:

        reproductor_video.closeplayer()

     

    reproductor_video = mediaplayer(ruta, frame_visualizer, frame_botones_procesar, spininicio=inbox_inicio, spinfinal=inbox_fin, spinactual=inbox_actual, mainvideo=true)

    reproductor_video.update_progres_video()

 

arbol = checkboxtreeview(frame_tree_in)

arbol.bind("<<treeviewselect>>", item_selected)

Salin selepas log masuk

reproductor.py

1

2

3

4

5

6

7

8

9

10

11

class MediaPlayer:

    def __init__(ruta, frame_visualizer, frame_botones_procesar, spinInicio=inBox_inicio, spinFinal=inBox_fin, spinActual=inBox_Actual, mainVideo=True):

        p = Process(target=self.funcion1)

        p.start()

        #p.join

 

    def funcion1(self):

        cont = 0

        while cont < 100:

            cont += 1

            print("contador =", cont)

Salin selepas log masuk

Saya mencuba kod yang sama dalam fungsi utama dan ia dilaksanakan dengan baik, tetapi dari panggilan balik ia tidak akan dilaksanakan.


Jawapan betul


Asal

Penyelesaian di sini untuk mereka yang memerlukan, malah jika ia boleh dilancarkan dari acara di tkinter seperti ini:

Terjemahan (Terjemahan Google):

Penyelesaian ada di sini untuk mereka yang memerlukan, malah ia boleh dilancarkan dari acara di tkinter seperti ini:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

from multiprocessing import Process, log_to_stderr, get_logger

import time

from tkinter import Tk

from tkinter import ttk

import logging

import sys

 

 

def item_selected(event):

     

    my_objeto = objeto()

    button_eraser.config(command=lambda:my_objeto.lanzador(2))

    button_marco.config(command=lambda:my_objeto.lanzador(1))

    my_objeto.start_player()

 

class objeto:

 

    def __init__(self) -> None:

        #self.start_player()

        pass

     

    def start_player(self):

        pass

         

 

    def funcion1(self):

        contador = 0

        while 1:

            contador += 1

            print("Func1: ", contador, self.palabra)

            time.sleep(0.1)

             

            if contador > 80:

                break

         

        q = Process(target=self.funcion3)

        q.start()

        #q.join()

     

    def funcion2(self):

        contador = 0

        while 1:

            contador += 2

            print("Func2: ", contador)

            time.sleep(0.2)

            if contador > 120:

                break

     

    def funcion3(self):

        contador = 0

        while 1:

            contador += 2

            print("Func3: ", contador)

            time.sleep(0.02)

            if contador > 200:

                break

     

    def lanzador(self,mode):

        log_to_stderr(logging.DEBUG)

        logger = get_logger()

        logger.setLevel(logging.INFO)

 

        if mode == 1:

            self.p = Process(target=self.funcion1)

            self.p.start()

        elif mode == 2:

            self.p = Process(target=self.funcion2)

            self.p.start()

         

    def unir(self):

        self.p.join()

        print("Salio")

 

    def iniciar_multis(self):

        self.lanzador(2)

        self.lanzador(1)

Salin selepas log masuk

Atas ialah kandungan terperinci Pemprosesan berbilang daripada tkinter panggil balik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana saya menggunakan sup yang indah untuk menghuraikan html? Bagaimana saya menggunakan sup yang indah untuk menghuraikan html? Mar 10, 2025 pm 06:54 PM

Bagaimana saya menggunakan sup yang indah untuk menghuraikan html?

Cara memuat turun fail di python Cara memuat turun fail di python Mar 01, 2025 am 10:03 AM

Cara memuat turun fail di python

Penapisan gambar di python Penapisan gambar di python Mar 03, 2025 am 09:44 AM

Penapisan gambar di python

Cara Menggunakan Python untuk Mencari Pengagihan Zipf Fail Teks Cara Menggunakan Python untuk Mencari Pengagihan Zipf Fail Teks Mar 05, 2025 am 09:58 AM

Cara Menggunakan Python untuk Mencari Pengagihan Zipf Fail Teks

Cara Bekerja Dengan Dokumen PDF Menggunakan Python Cara Bekerja Dengan Dokumen PDF Menggunakan Python Mar 02, 2025 am 09:54 AM

Cara Bekerja Dengan Dokumen PDF Menggunakan Python

Cara Cache Menggunakan Redis dalam Aplikasi Django Cara Cache Menggunakan Redis dalam Aplikasi Django Mar 02, 2025 am 10:10 AM

Cara Cache Menggunakan Redis dalam Aplikasi Django

Bagaimana untuk melakukan pembelajaran mendalam dengan Tensorflow atau Pytorch? Bagaimana untuk melakukan pembelajaran mendalam dengan Tensorflow atau Pytorch? Mar 10, 2025 pm 06:52 PM

Bagaimana untuk melakukan pembelajaran mendalam dengan Tensorflow atau Pytorch?

Memperkenalkan Toolkit Bahasa Alam (NLTK) Memperkenalkan Toolkit Bahasa Alam (NLTK) Mar 01, 2025 am 10:05 AM

Memperkenalkan Toolkit Bahasa Alam (NLTK)

See all articles