为什么池要多次运行整个文件? [英] Why does pool run the entire file multiple times?

查看:13
本文介绍了为什么池要多次运行整个文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试理解此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方法,如果需要,您也可以将其导入到另一个脚本中。

这篇关于为什么池要多次运行整个文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆