Process (), вызванный из Pylons, создает форк - PullRequest
1 голос
/ 19 августа 2011

Я пытаюсь создать фоновый процесс для некоторых тяжелых вычислений из основного процесса Pylons.Вот код:

    p = Process(target = instance_process, \
                args = (instance_tuple.instance, parent_pipe, child_pipe,))
    p.start()

Процесс создан и запущен, но, похоже, является ответвлением от основного процесса: он прослушивает один и тот же порт и все приложение зависает.Что я делаю неправильно?

Заранее спасибо.

1 Ответ

1 голос
/ 19 августа 2011

Процесс - это вилка.Если вы посмотрите на его реализацию, то обнаружите, что Process.start() вызывает разветвление.Однако он НЕ вызывает ни одного из вариантов exec для изменения контекста выполнения.

Тем не менее, это может не иметь ничего общего с прослушиванием на том же порту (если родительский процесс не является многопоточным),В какой момент программа зависает?Я знаю, что когда вы пытаетесь завершить работу программы на Python без завершения дочернего процесса, созданного с помощью многопроцессорной обработки, он будет зависать до тех пор, пока дочерний процесс не завершится.Это может быть вызвано, если, например, вы не закрыли канал между процессами.

...