【发布时间】:2017-01-09 07:31:04
【问题描述】:
我正在尝试做一个简单的多处理示例。我试图在多处理线程池中运行一个简单的 shell 脚本。脚本正在执行,但脚本的输出未正确返回给调用函数。
def call_proc(cmd):
p = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
print "Out" +out
print "Error" +err
return (out, err)
if __name__ == "__main__":
pool = ThreadPool(multiprocessing.cpu_count())
results = []
for i in range(1,5):
results.append(pool.apply_async(call_proc ("./test.sh")))
# Close the pool and wait for each running task to complete
pool.close()
pool.join()
print results
for result in results:
out, err = result.get()
print("out: {} err: {}".format(out, err))
当我运行 python 脚本时,我得到以下输出以及异常
输出:测试完成
错误:
输出:测试完成
错误:
输出:测试完成
错误:
输出:测试完成
错误:
追溯 (最近一次通话最后):文件“osshm_multiprocess.py”,第 25 行,在 out, err = result.get() 文件“/usr/lib64/python2.6/multiprocessing/pool.py”,第 422 行,在 get raise self._value TypeError: 'tuple' object is not callable
不知道哪里出错了。
【问题讨论】:
-
你忘记了
call_proc和("./test.sh")之间的逗号 - 现在你执行call_proc("./test.sh")并且它的结果被使用了apply_async参数。
标签: python subprocess multiprocessing