为什么 pool 运行 整个文件多次?
Why does pool run the entire file multiple times?
我正在尝试理解此 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) 真正的问题 - 我如何多次获得 运行 一个命令,但所有其他命令一次?
Multiprocessing 需要在每个子进程中导入您的脚本才能使用 go()
功能。导入脚本时,它会打印日期。如果你只想在主脚本中 运行 ,把它放在 if __name__ == '__main__'
块中。
Python 为每个进程导入 __main__
模块。在导入时,整个文件被再次执行。在 python 3 上,如果你删除 if __name__ == '__main__'
你将得到一个无限循环,因为文件被递归调用。
真题:
在 python 脚本中,我通常尽量避免在全局范围内执行任何语句或变量,函数定义除外。我将以下内容用作所有 python 脚本的模板。
import sys
def main(argv):
#main logic here
if __name__ == '__main__':
main(sys.argv)
当你有一个具有可重用功能的脚本时,即使它有一个 main 方法,如果需要,你也可以将它导入到另一个脚本中。
下面的修改不会多次打印这些行。
import time
from multiprocessing import Pool
def main():
if __name__ == '__main__':
print(time.strftime('%Y-%m-%d %H:%M', time.localtime(time.time())))
props2=[
'170339',
'170357',
'170345',
'170346',
'171232',
'170363',
]
pool = Pool(processes=3)
pool.map(go, props2)
print(time.strftime('%Y-%m-%d %H:%M', time.localtime(time.time())))
def go(x):
print(x)
main()
您原来的 post 缩进错误:
print(time.strftime('%Y-%m-%d %H:%M', time.localtime(time.time())))
每个进程的所有 "global" 个语句都是 运行。
我正在尝试理解此 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) 真正的问题 - 我如何多次获得 运行 一个命令,但所有其他命令一次?
Multiprocessing 需要在每个子进程中导入您的脚本才能使用 go()
功能。导入脚本时,它会打印日期。如果你只想在主脚本中 运行 ,把它放在 if __name__ == '__main__'
块中。
Python 为每个进程导入 __main__
模块。在导入时,整个文件被再次执行。在 python 3 上,如果你删除 if __name__ == '__main__'
你将得到一个无限循环,因为文件被递归调用。
真题:
在 python 脚本中,我通常尽量避免在全局范围内执行任何语句或变量,函数定义除外。我将以下内容用作所有 python 脚本的模板。
import sys
def main(argv):
#main logic here
if __name__ == '__main__':
main(sys.argv)
当你有一个具有可重用功能的脚本时,即使它有一个 main 方法,如果需要,你也可以将它导入到另一个脚本中。
下面的修改不会多次打印这些行。
import time
from multiprocessing import Pool
def main():
if __name__ == '__main__':
print(time.strftime('%Y-%m-%d %H:%M', time.localtime(time.time())))
props2=[
'170339',
'170357',
'170345',
'170346',
'171232',
'170363',
]
pool = Pool(processes=3)
pool.map(go, props2)
print(time.strftime('%Y-%m-%d %H:%M', time.localtime(time.time())))
def go(x):
print(x)
main()
您原来的 post 缩进错误:
print(time.strftime('%Y-%m-%d %H:%M', time.localtime(time.time())))
每个进程的所有 "global" 个语句都是 运行。