ipython и fork () - PullRequest
       19

ipython и fork ()

7 голосов
/ 18 мая 2011

Я планирую сценарий Python, который будет использовать os.fork() для создания группы дочерних процессов для выполнения некоторых вычислений.Родительский процесс будет блокироваться до тех пор, пока не прекратятся дочерние процессы.

Суть в том, что мне нужно иметь возможность запускать скрипт как из оболочки Unix, используя python, так и из ipython, используя %run. * 1007.*

Каким образом дочерние процессы должны завершаться, чтобы не вернуться в командную строку ipython?По моему опыту, sys.exit() не подойдет.

Ответы [ 2 ]

8 голосов
/ 03 июня 2011

Кажется, работает следующее:

import os, sys

child_pid = os.fork()
if child_pid == 0:
  print 'in child'
  os._exit(os.EX_OK)
  print 'hm... wasn''t supposed to get here'
else:
  print 'in parent'

Хитрость заключается в использовании os._exit() вместо sys.exit(). Документация содержит следующий отрывок:

Примечание Стандартный способ выхода sys.exit(n). _exit() должен нормально использоваться только в дочернем процессе после развилки ().

0 голосов
/ 02 июня 2011

В терминологии Linux вместо fork процесса iPython, почему бы вам exec не использовать обычный интерпретатор python из оболочки iPython и не получить этот один форк?

...