这段代码可以在Mac上正常运行(windows不行)
# build.py
from multiprocessing import Pool
import traceback
def f(x):
print 'start pool.f'
return x*x
def run():
for line in traceback.format_stack():
print(line.strip())
print 'start pool.run'
pool = Pool(processes=1)
print 'start pool.map'
print pool.map(f, range(10))
run()
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# jenkins.py
import build
print "doesn't run this line at all. the program is hanging in import"
build.run()
build.f()
build.inexist_fuction("the function doesn't exist, python doesn't have chance to check it")
#1 build.py中的run是top level的语句,当jenkins.py import build.py的时候,run被执行
#2 在官方文档中https://docs.python.org/2/library/multiprocessing.html有这么一个要求
Functionality within this package requires that the __main__
module be importable by the children.
在#1所描述的运行状态下,上述要求不成立
解决办法:
在build.py中不要run放到main中