pickle.PicklingError:无法pickle <class'module'=“”>:内置的属性查找模块失败

时间:2018-06-10 16:01:03

标签: python python-3.x tkinter multiprocessing python-multiprocessing

我是python中的新手,我正在尝试在类中使用多处理。我已尝试使用线程进行此操作并且它可以工作,但是当我将其更改为多处理时,它会出现如下所示的错误。我试图使用多处理而不是线程的原因是多处理有.terminate()而线程没有。请帮帮我,谢谢!

代码:

class PageMenu(tk.Frame):   


    def __init__(self, parent, controller):

        def startRolling(times):     
            theProcess = multiprocessing.Process(target = fa.main, args = (fa.roles[choice.get()], times))
            theProcess.start()
        tk.Frame.__init__(self, parent)
        textFeed = tk.IntVar()
        textField = tk.Entry(self, textvariable = textFeed)
        textField.place(x = 165, y = 170)

        button7 = tk.Button(self, text="=-=-=Start=-=-=",  command = lambda: startRolling(textFeed.get()),font = LARGE_FONT)
        button7.place(x = 165, y = 200)

错误: _pickle.PicklingError:无法pickle:内置函数上的属性查找模块失败

完整版本的错误位于以下链接

enter image description here

1 个答案:

答案 0 :(得分:1)

multiprocessing不能替代线程。

在使用multiprocessing创建的进程中运行的代码在与创建它的进程不同的进程中运行。因此,它无法访问与Tk GUI相关的对象;这些对象仅在父进程中有效。

如果您需要终止一个线程,请使用一个条件变量来通知它是时候停止了。