functools.partial和multiprocessing.Pool.map不兼容吗?
我有一段代码,简化后看起来像这样:
run = functools.partial(run, grep=options.grep, print_only=options.print_only, force=options.force)
if not options.single and not options.print_only and options.n > 0:
pool = multiprocessing.Pool(options.n)
Map = pool.map
else: Map = map
for f in args:
with open(f) as fh: Map(run, fh)
try:
pool.close()
pool.join()
except NameError: pass
当我在单进程模式下运行它时,一切正常,但在多进程模式下运行时却出现了这样的错误:
TypeError: type 'partial' takes at least one argument
这些错误和很长的调用堆栈信息混在一起,都是通过多进程模块产生的。这是怎么回事呢?
我使用的是Python 2.6.1版本。
2 个回答
0
它的工作原理是这样的:
from multiprocessing.dummy import Pool as ThreadPool
def executeFunction(server,function):
print "Server: %s and function: %s" % (server,function)
def executeParallel(servers,function, threads=10):
pool = ThreadPool(threads)
functionArguments=partial(executeFunction, function=function)
results = pool.map(functionArguments, servers)
pool.close()
pool.join()
return results
executeParallel(serverList, "Install")