Python多处理:为什么使用Process从一开始就运行我的程序



我很难弄清楚为什么我的控制台总是打印我在文件开头的打印语句。以下是它的样子:

from multiprocessing import Process
import time
print('hello')  # why does this get printed over and over again?

def func1(num):
print(num ** 2)
time.sleep(1)

def func2(num):
print(num ** 3)
time.sleep(1)

if __name__ == '__main__':
counter = 0
while counter < 10:
proc1 = Process(target=func1, args=[2])
proc2 = Process(target=func2, args=[2])
proc1.start()
proc2.start()
proc1.join()
proc2.join()
counter += 1

一旦我运行它:它会打印";你好"a每个循环。我确信我只是犯了一个愚蠢的错误,但任何帮助都会很棒,谢谢。

multiprocessing可以派生现有进程或生成新进程,具体取决于操作系统支持的选项。在只能派生(执行新进程(的Windows上,将执行python的新实例。该实例导入模块,然后通过扩展父进程的pickle快照来重新创建执行环境。从理论上讲,只需为子流程提供合适的环境即可。

在您的案例中,print处于模块级别,因此它是作为子流程中导入的一部分执行的。如果这是"__main__"模块,您可以简单地将打印内容放入if __name__ == "__main__":子句中。当它作为模块导入而不是作为脚本执行时,打印将不会运行。

如果它不是主脚本模块,那就太混乱了。模块的一般规则是,它们应该是可导入的,没有副作用,打印是副作用。在这种情况下最好将其删除。

相关内容

  • 没有找到相关文章

最新更新