为什么池要多次运行整个文件?

2022-04-10 00:00:00 python python-multiprocessing

问题描述

我正在尝试理解此Python2.7.5示例脚本的输出:

import time
from multiprocessing import Pool

print(time.strftime('%Y-%m-%d %H:%M', time.localtime(time.time())))
props2=[
            '170339',
            '170357',
            '170345',
            '170346',
            '171232',
            '170363',
            ]
def go(x):
     print(x)

if __name__ == '__main__':
    pool = Pool(processes=3)
    pool.map(go, props2)

print(time.strftime('%Y-%m-%d %H:%M', time.localtime(time.time())))  

这将产生输出:

2015-08-06 10:13

2015-08-06 10:13

2015-08-06 10:13

170339

170357

170345

170346

171232

170363

2015-08-06 10:13

2015-08-06 10:13

2015-08-06 10:13

我的问题是:

A)为什么时间在开始和结束时打印三次?我本以为它会打印开始时间,然后打印结束时间。

B)真正的问题--如何让它多次运行一个命令,而同时运行所有其他命令?


解决方案

为每个进程导入__main__模块。在导入时,会再次执行整个文件。在python3上,如果删除if __name__ == '__main__',将会出现无限循环,因为该文件是递归调用的。

对于真正的问题:

在python脚本中,我通常会尽量避免在全局范围内执行除函数定义以外的任何语句或变量。我使用下面的模板作为所有python脚本的模板。

import sys

def main(argv):
  #main logic here

if __name__ == '__main__':
  main(sys.argv)
当您有一个具有可重用函数的脚本时,即使它有一个Main方法,如果需要,您也可以将其导入到另一个脚本中。

相关文章