python - pickle.PicklingError: 不能腌制: 内置的属性查找模块失败
问题描述
我是 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: Can't pickle : 内置属性查找模块失败
错误的完整版本在下面的链接中
解决方案
multiprocessing
不能代替线程。
在使用创建的进程中运行的代码在与multiprocessing
创建它的进程不同的进程中运行。因此,它无法访问与 Tk GUI 相关的对象;这些对象仅在父进程中有效。
如果您需要终止线程,请使用条件变量通知它该停止了。
推荐阅读
- javascript - 如何从javascript中突破一些功能?
- java - Java中的反应式编程深入理解
- javascript - 在javascript中对数组进行排序
- android - 无法解决:com.android.support:support-v4:27.1.1。当我添加 graphview 依赖项时发生此错误
- linux - 为什么我的 NVIDIA docker 不工作?来自守护进程的错误响应?
- qemu - 不好:带有 PX4 固件的 QEMU
- php - 如何在 laravel 中使用 keywork 获取表格的更多细节?
- android - 如何通过通过 SMS 发送的链接打开应用程序
- c# - 使用 Linq/c# 根据 ID 合并同一类的 2 个实例
- android - Resources$NotFoundException:资源不是可绘制的(颜色或路径)