Я пытаюсь сделать простой пример многопроцессорности. В котором я пытаюсь запустить простой сценарий оболочки в многопроцессорном пуле потоков. Сценарий выполняется, но вывод скрипта не возвращается должным образом вызывающей функции.Проблема со значением, возвращаемым функцией python
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))
Я получаю следующий результат наряду с исключением, когда я запустить питон скрипт
Output :Test Done
Error :
Output :Test Done
Error :
Output :Test Done
Error :
Output :Test Done
Error :
Traceback (most recent call last): File "osshm_multiprocess.py", line 25, in out, err = result.get() File "/usr/lib64/python2.6/multiprocessing/pool.py", line 422, in get raise self._value TypeError: 'tuple' object is not callable
Не уверен, где это происходит не так.
Вы забыли запятая между 'call_proc' и' (»./test. sh ")' - теперь вы выполняете 'call_proc (" ./ test.sh ")', и в его результате используется аргумент 'apply_async'. – furas