当前位置: 首页 > 面试题库 >

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

百里俭
2023-03-14
问题内容

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


问题答案:

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

对于真正的问题:

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

import sys

def main(argv):
  #main logic here

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

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



 类似资料:
  • 问题内容: 我到处都读到过,当您在Java中定义介于-128到127之间的Integer时,它不会创建新对象,而是返回已经创建的对象。 除了让新手程序员比较Integer对象以查看它们是否具有相同的数字外,我看不到这样做的任何意义,但是我认为这很糟糕,因为确保他们认为可以将任何Integer对象与进行比较,并且还在教学在任何编程语言中都不好的做法:将两个“不同”对象的内容与进行比较。 这样做有其他

  • 除了让新手程序员将整数对象与进行比较,以确定它们是否是相同的数字之外,我认为这样做没有什么意义,但我认为这是不好的,因为他们肯定认为可以将任何整数与进行比较,而且在任何编程语言中都教给了一种不好的做法:用比较两个“不同”对象的内容。 为什么这样做还有其他原因吗?或者这只是在设计语言时的一个错误决定(在我看来),就像JavaScript中的可选分号一样? 编辑:我在这里看到他们解释了行为:为什么整数

  • 我正在使用Flask开发一个网站,在开发过程中,我使用以下文件运行flask: 当我启动服务器时,或由于文件已更新而自动重新启动时,它始终显示打印行两次: 虽然这并不是一个真正的问题(其余部分如预期那样工作),但我只是想知道为什么它会这样?有什么想法吗?

  • 问题内容: 我已经从Dockerfile建立了一个名为centos + ssh的基础映像。在centos + ssh的Dockerfile中,我使用CMD运行ssh服务。 然后我想构建一个运行其他服务的图像,该服务名为rabbitmq,Dockerfile: 要启动rabbitmq容器,请运行: 但是ssh服务不起作用,它感觉到Rabbitmq的Dockerfile CMD覆盖了centos的CM

  • 我已经从Dockerfile中构建了一个名为Centos+ssh的基本映像。在Centos+ssh的Dockerfile中,我使用CMD来运行ssh服务。 然后我想构建一个映像,运行其他名为rabbitmq的服务,DockerFile: 若要启动rabbitmq容器,请运行: 但是ssh服务不工作,它感测RabbitMQ的Dockerfile CMD覆盖Centos的CMD。 CMD如何在dock

  • 我读在初始渲染时只被调用一次,但我看到它被渲染了多次。 似乎我创建了一个递归循环。 组件didMount调度动作来获取数据 一旦接收到数据,它就会触发成功操作,将数据存储在redux状态。 父反应组件连接到redux存储,并且具有mapStateToProps用于刚刚在上述步骤中更改的条目 父渲染子组件(通过变量编程选择) 子组件的组件didMount再次被调用 它消除了获取数据的操作 我想这就是