【问题标题】:Using multiprocessing in a class on Windows在 Windows 上的类中使用多处理
【发布时间】:2021-07-01 21:23:11
【问题描述】:

我在一个由另一个.py 文件激活的类中有一个函数。这个函数只是为了同时运行另外两个不同的函数。

它在 Ubuntu 上运行良好,但在 Windows 上却不行。有没有办法在两个系统上获得相同的结果(可能使用不同的代码)?

import multiprocessing
import time


class myClass:
    def run_functions(self, var1):
        self.p1 = multiprocessing.Process(target=self.first_function, args=[var1])
        self.p2 = multiprocessing.Process(target=self.second_function)
        self.p1.start()
        self.p2.start()

    def first_function(self, var1):
        print('First function activated ' + var1)
        time.sleep(2)

    def second_function(self):
        print('Second function activated')

x = myClass()
x.run_functions('10')       #Normally activated from another .py file with a list

我不介意改用线程。它只需要工作!

【问题讨论】:

  • 让我猜猜:它不打印?
  • 告诉我们什么时候出错。第一个问题是底部的两行应该在一个if __name__ == "__main__": if 子句中,当多处理执行一个新的python 并重新导入这个模块时,它可以防止代码重新运行。

标签: python windows multithreading multiprocessing python-multithreading


【解决方案1】:

当我开始在 Windows 上进行多处理时,我遇到了同样的问题。问题在于 Windows 生成与 UNIX 不同的新进程的方式。搜索“安全自导入”。

对您来说最简单的方法是将first_functionsecond_function 导出到单独的模块中,然后在文件开头导入模块。我已经在另一个主题中描述了解决方案:https://stackoverflow.com/a/29751273/4141279

【讨论】:

    猜你喜欢
    • 2017-05-28
    • 2022-08-10
    • 2012-02-02
    • 1970-01-01
    • 2021-05-15
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多