【问题标题】:Python Multiprocessing Pickling Confusion in Classes类中的 Python 多处理酸洗混淆
【发布时间】:2022-01-31 03:45:47
【问题描述】:

有人告诉我,用于多处理的酸洗类方法对于 Processes 是不可能的。但出于某种原因,此代码有效。我曾尝试在其他应用程序中完成相同的任务,但结果不一致。我该怎么做才能使此功能始终如一地工作?

from multiprocessing import Process

class test():
  def run(self):
    print("HI")

  def p(self):
    p = Process(target=self.run)
    p.start()


a = test()
a.p()

我已经尝试在 python3 和 python 中使用此功能,并且它在两个版本中都有效且无效。我如何确保它有效?

【问题讨论】:

  • 您对“工作和不工作”有何看法?你看见什么了?此代码在 Windows 上会失败。
  • 我尝试了 python3 和 python,它对两者都有效,但对两者都无效。使用任一版本的含义都没有区别。为什么它不能在 Windows 上运行?你能详细说明一下吗?
  • 我仍然不明白“它有效且无效”是什么意思。它工作一次,下一次停止工作?它是如何失败的?它打印了什么吗?见this answer,别忘了调用`join`

标签: python pickle python-multiprocessing


【解决方案1】:

当启动一个新进程时,Windows 和 Mac Spawn 需要腌制对象的进程。然而,在 Linux 上,进程是 Forked,它从父进程继承内存。如果一个类包含非 pickle-able 对象,并且您想在单独的进程上运行类方法,则必须使用 Linux。

【讨论】:

    猜你喜欢
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 2011-11-22
    • 2017-03-30
    相关资源
    最近更新 更多