Broken Pipe при вызове subprocess.Popen () внутри многопроцессорной обработки. Process () - PullRequest
2 голосов
/ 02 октября 2010

У меня возникла проблема при вызове оболочки из мультипроцессора. Process ().Кажется, ошибка исходит от Git, но я просто не могу понять, почему это происходит только из-за многопроцессорности. Process ().Обратите внимание, что ниже приведен пример для демонстрации того, что происходит ... в реальном коде в Process () происходит гораздо больше ... но я использую Popen для выполнения вызовов оболочки как часть этого:

#!/usr/bin/python

import os
import shutil
from multiprocessing import Process
from subprocess import Popen

def run():
    cmd_args = ['git', 'clone', 'git@github.com:derks/test.git', 'test-repo-checkout']
    res = Popen(cmd_args)
    res.wait()

# clean
if os.path.exists('./test-repo-checkout'):
    shutil.rmtree('./test-repo-checkout')

print "\n--- this doesnt work"
process = Process(target=run)
process.start()
process.join()

print "\n--- this does work"
run()

Результат:

$ python test.py

--- this doesnt work
Cloning into test-repo-checkout...
Warning: untrusted X11 forwarding setup failed: xauth key data not generated
Warning: No xauth data; using fake authentication data for X11 forwarding.
fatal: write error: Broken pipe

--- this does work
Cloning into test-repo-checkout...
Warning: untrusted X11 forwarding setup failed: xauth key data not generated
Warning: No xauth data; using fake authentication data for X11 forwarding.
remote: Counting objects: 9, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 9 (delta 1), reused 0 (delta 0)
Receiving objects: 100% (9/9), done.
Resolving deltas: 100% (1/1), done.

Любая помощь действительно будет отличной ... Я все еще новичок в модуле многопроцессорной обработки и до сих пор не сталкивался с какими-либо проблемами с ним.

1 Ответ

1 голос
/ 02 октября 2010

Хм, я только что понял, что работаю на Python 2.6.1 .... при запуске того же примера на 2.6.4 не имеет ту же проблему. Похоже, ошибка, исправленная в Python.

...