一尘不染

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

python

我试图了解此Python 2.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)真正的问题-如何使它多次运行一个命令,而一次运行所有其他命令?


阅读 156

收藏
2021-01-20

共1个答案

一尘不染

Python__main__为每个进程导入模块。导入时,将再次执行整个文件。在python 3上,如果删除,if __name__ == '__main__'则将得到一个无限循环,因为该文件被递归调用。

对于真正的问题:

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

import sys

def main(argv):
  #main logic here

if __name__ == '__main__':
  main(sys.argv)

如果您的脚本具有可重复使用的功能,即使它具有main方法,也可以根据需要将其导入另一个脚本中。

2021-01-20