Форум сайта python.su
Приветствую, собственно перепробовал уже все возможные и приемлемые в данном случае варианты, больше ничего не могу придумать, прошу помощи. Задача следующая: у меня есть pid подпроцесса (его создаю сам, новый процесс наследует от multiprocessing и создаётся обычным способом через метод start), нужно послать этому подпроцессу сигнал, либо что-то ещё, что бы тот прервался по получению этого сигнала, выполнил действия в обработчике этого сигнала, и дальше продолжил работать.
Проблема в том, что в данном случае, возможности использовать какие-либо объекты синхронизации (очереди, пайпы и т.д.) и передавать их в момент создания подпроцесса нельзя (просто нельзя, в силу некоторых требований, от меня не зависящих), и единственное, чем я могу располагать - это pid пораждённого подпроцесса, и зная какой, нужно каким-то образом сообщить подпроцессу, что тот должен выполнить некоторое действие, указанное в обработчике.
Далее, в мануале сказано, что в случае реализации метода os.kill для винды, любые сигналы, кроме signal.CTRL_C_EVENT и signal.CTRL_BREAK_EVENT будут приводить к моментальному вызовы winapi-шной TerminateProcess, без какого-либо вызова обработчика и проче (то есть, просто и сразу убивать подпроцесс), однако же, эти вин-специфические коды (в случае которых, процесс убиваться не будет), нельзя использовать в задании обработчика для этих сигналов, то есть, если в главной программе, сделать:
os.kill(pid, signal.CTRL_C_EVENT)
def handle(signum, frame):
print("I have signal with num = {0}!!!!!".format(signum))
signal.signal(signal.CTRL_C_EVENT, handle)
Отредактировано (Ноя. 2, 2011 03:31:39)
Офлайн
В win-системах нет такого понятия как сигналы. Если нужно передавать данные от одного процесса другому можно воспользоваться сокетами или pipe'ами.
Офлайн