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

发布于 2021-01-29 14:11:28

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

关注者
0
被浏览
206
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

    对于真正的问题:

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

    import sys
    
    def main(argv):
      #main logic here
    
    if __name__ == '__main__':
      main(sys.argv)
    

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看