मैं अजगर और टिंकर के साथ सरल मल्टीप्रोसेसिंग करने की कोशिश कर रहा हूं। लेकिन मुझे त्रुटि मिल रही है।

Exception in Tkinter callback
...
...
    ForkingPickler(file, protocol).dump(obj)
TypeError: cannot pickle '_tkinter.tkapp' object

कार्यक्रम सरल है। चलाने के बाद यह विंडो (स्टार्टपेज) खोलता है जहां मैं बटन पर क्लिक करता हूं जो मुझे प्रयोग पृष्ठ पर रीडायरेक्ट करता है जहां मैं बटन पर क्लिक करता हूं और सब कुछ शुरू होता है

class experimentPage(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)

        # start experiment on click
        self.button2 = tk.Button(self, text="Ready",
                            command=self.logic)
        self.button2.pack()

    def proc1(self):
        while True:
            print("LOL1")

    def proc2(self):
        while True:
            print("LOL2")

    def proc3(self):
        while True:
            print("LOL3")

    def logic(self):
        t1 = multiprocessing.Process(target=self.proc1)
        t2 = multiprocessing.Process(target=self.proc2)
        t3 = multiprocessing.Process(target=self.proc3)
        t1.start()
        t2.start()
        t3.start()
        t1.join()
        t2.join()
        t3.join()

और यहाँ मेरा मुख्य है

class Main(tk.Tk):

    def __init__(self, *args, **kwargs):
        
        tk.Tk.__init__(self, *args, **kwargs)
        container = tk.Frame(self)
        self.attributes('-fullscreen', True) 
        container.pack(side="top", fill="both", expand = True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        self.frames = {}

        for F in (startPage.startPage, experimentPage.experimentPage):

            frame = F(container, self)

            self.frames[F] = frame

            frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame(startPage.startPage)

    def show_frame(self, cont):

        frame = self.frames[cont]
        frame.tkraise()

app = Main()
app.mainloop()

मैं बस इसे काम नहीं कर सकता। किसी भी मदद के लिए धन्यवाद।

1
user9817924 20 मार्च 2021, 15:26

1 उत्तर

सबसे बढ़िया उत्तर

मल्टीप्रोसेसिंग प्रक्रियाओं के बीच सूचनाओं के आदान-प्रदान के लिए multiprocessing.Queue का उपयोग करता है। यह कतार कार्यान्वयन जानकारी को क्रमबद्ध और अक्रमांकन करने के लिए pickle का उपयोग करता है।

टिंकर के ऐप सहित कुछ ऑब्जेक्ट पिक करने योग्य नहीं हैं।

संदर्भ के लिए यह SO प्रश्न देखें।

1
Icebreaker454 20 मार्च 2021, 17:37
1
यह मेरे उत्तर की तुलना में एक टिप्पणी की तरह अधिक लगता है।
 – 
Cool Cloud
20 मार्च 2021, 17:42
धन्यवाद, यह सिर्फ मेरी स्नातक थीसिस है, इसलिए यह दुनिया का अंत नहीं है: डी लेकिन मुझे एक कोर पर भी पर्याप्त डेटा मिल सकता है, इसलिए यह जानने के लिए कि मैं इसे वैसे ही छोड़ दूंगा। और आपके उत्तर के लिए धन्यवाद।
 – 
user9817924
20 मार्च 2021, 19:09