История изменений
Исправление
AIv,
(текущая версия)
:
Имхо, нельзя два раза вызывать waitpid (и аналогичные функции) на один и тот же pid (ибо это одноразовый clean-up action).
Правда? Че то я в документации такого не нашел. Зато нашел вот такое
http://wm-help.net/lib/b/book/2075737573/186
" WNOHANG
Если ни один порожденный процесс не завершился, вернуться немедленно. Таким способом можно периодически проверять, не закончился ли какой- нибудь порожденный процесс. (Такая периодическая проверка известна как опрашивание события.)"
или вот такое
http://citforum.ru/programming/unix/proc_&_threads/
«Для того, чтобы процесс не оставлял зомби, можно вызывать функцию waitpid() периодически (с флагом NOHANG, чтобы она не блокировала вызвавший процесс если в системе нет зомби).»
Что полностью отвечает здравому смыслу (иначе напуркуа такую опцию вообще вводить)?
Опять-таки, зачем ты делаешь поллинг в цикле если waitpid может сам ждать наступление нужного события (хинт — убери sleep и os.WNOHANG)?
Подумай? Вот у меня форкнуто четрые процесса, три быстро завершились а один затупил, и я вишу на его waitpid-е. Клево? Это называется «разбалансировка загрузки». Вот в ветке else так можно сделать, да
else:
for p in pids: os.waitpid(p, 0)
print 'finished'; sys.exit()
Есть же multiprocessing, есть другие готовые средства...
Я начинаю за тебя волноваться. Сколько раз мне нужно повторить, что жестким и необходимым требованием в данном случае является прямой вызов форка? Кроме того, я не очень понимаю нафига мне монстр-multipricessing, если задачи НЕ взаимодействуют. Ну кроме того, что мастер поглядывает кто досчитался и запускает следующего - как то на полноценное взаимодействие это ИМНО не тянет...
Тебя обманули, я неплохо вытягиваю проекты типа того что ты здесь показываешь :)
Пока я этого не заметил, извини. Кроме того, я тут не говорю о ПРОЕКТЕ целиком - я говорю о мааааленьком фрагменте большой задачи. И твоя реакция - реакция настоящего программиста «у вас тут усе ужастно и страшно, так делать совсем нельзя, давайте все перепишем стандартными средствами (и еще прикрутим шлюх, блэкджек и SQL/dbus/веб сервис)». То, что при этом задача потеряет смысл из виду упускается. Именно поэтому на моей полянке от настоящих программистов толку мало - вы гораздо лучше знаете как правильно писать программы, но вам довольно сложно объяснить что именно нужно написать, крайне сложно объяснить зачем это нужно написать, и совершенно невозможно объяснить почему нужно написать именно это, а не что то иное.
Исправление
AIv,
:
Имхо, нельзя два раза вызывать waitpid (и аналогичные функции) на один и тот же pid (ибо это одноразовый clean-up action).
Правда? Че то я в документации такого не нашел. Зато нашел вот такое
http://wm-help.net/lib/b/book/2075737573/186
" WNOHANG
Если ни один порожденный процесс не завершился, вернуться немедленно. Таким способом можно периодически проверять, не закончился ли какой- нибудь порожденный процесс. (Такая периодическая проверка известна как опрашивание события.)"
или вот такое
http://citforum.ru/programming/unix/proc_&_threads/
«Для того, чтобы процесс не оставлял зомби, можно вызывать функцию waitpid() периодически (с флагом NOHANG, чтобы она не блокировала вызвавший процесс если в системе нет зомби).»
Что полностью отвечает здравому смыслу (иначе напуркуа такую опцию вообще вводить)?
Опять-таки, зачем ты делаешь поллинг в цикле если waitpid может сам ждать наступление нужного события (хинт — убери sleep и os.WNOHANG)?
Подумай? Вот у меня форкнуто четрые процесса, три быстро завершились а один затупил, и я вишу на его waitpid-е. Клево? Это называется «разбалансировка загрузки». Вот в ветке else так можно сделать, да (это я потом, спросонья уже допер);-)
Есть же multiprocessing, есть другие готовые средства...
Я начинаю за тебя волноваться. Сколько раз мне нужно повторить, что жестким и необходимым требованием в данном случае является прямой вызов форка? Кроме того, я не очень понимаю нафига мне монстр-multipricessing, если задачи НЕ взаимодействуют. Ну кроме того, что мастер поглядывает кто досчитался и запускает следующего - как то на полноценное взаимодействие это ИМНО не тянет...
Тебя обманули, я неплохо вытягиваю проекты типа того что ты здесь показываешь :)
Пока я этого не заметил, извини. Кроме того, я тут не говорю о ПРОЕКТЕ целиком - я говорю о мааааленьком фрагменте большой задачи. И твоя реакция - реакция настоящего программиста «у вас тут усе ужастно и страшно, так делать совсем нельзя, давайте все перепишем стандартными средствами (и еще прикрутим шлюх, блэкджек и SQL/dbus/веб сервис)». То, что при этом задача потеряет смысл из виду упускается. Именно поэтому на моей полянке от настоящих программистов толку мало - вы гораздо лучше знаете как правильно писать программы, но вам довольно сложно объяснить что именно нужно написать, крайне сложно объяснить зачем это нужно написать, и совершенно невозможно объяснить почему нужно написать именно это, а не что то иное.
Исходная версия
AIv,
:
Имхо, нельзя два раза вызывать waitpid (и аналогичные функции) на один и тот же pid (ибо это одноразовый clean-up action).
Правда? Че то я в документации такого не нашел. Зато нашел вот такое
http://wm-help.net/lib/b/book/2075737573/186
" WNOHANG
Если ни один порожденный процесс не завершился, вернуться немедленно. Таким способом можно периодически проверять, не закончился ли какой- нибудь порожденный процесс. (Такая периодическая проверка известна как опрашивание события.)"
или вот такое
http://citforum.ru/programming/unix/proc_&_threads/
«Для того, чтобы процесс не оставлял зомби, можно вызывать функцию waitpid() периодически (с флагом NOHANG, чтобы она не блокировала вызвавший процесс если в системе нет зомби).»
Что полностью отвечает здравому смыслу (иначе напуркуа такую опцию вообще вводить)?
Опять-таки, зачем ты делаешь поллинг в цикле если waitpid может сам ждать наступление нужного события (хинт — убери sleep и os.WNOHANG)?
Подумай? Вот у меня форкнуто четрые процесса, три быстро завершились а один затупил, и я вишу на его waitpid-е. Клево? Это называется «разбалансировка загрузки».
Есть же multiprocessing, есть другие готовые средства...
Я начинаю за тебя волноваться. Сколько раз мне нужно повторить, что жестким и необходимым требованием в данном случае является прямой вызов форка? Кроме того, я не очень понимаю нафига мне монстр-multipricessing, если задачи НЕ взаимодействуют. Ну кроме того, что мастер поглядывает кто досчитался и запускает следующего - как то на полноценное взаимодействие это ИМНО не тянет...
Тебя обманули, я неплохо вытягиваю проекты типа того что ты здесь показываешь :)
Пока я этого не заметил, извини. Кроме того, я тут не говорю о ПРОЕКТЕ целиком - я говорю о мааааленьком фрагменте большой задачи. И твоя реакция - реакция настоящего программиста «у вас тут усе ужастно и страшно, так делать совсем нельзя, давайте все перепишем стандартными средствами (и еще прикрутим шлюх, блэкджек и SQL/dbus/веб сервис)». То, что при этом задача потеряет смысл из виду упускается. Именно поэтому на моей полянке от настоящих программистов толку мало - вы гораздо лучше знаете как правильно писать программы, но вам довольно сложно объяснить что именно нужно написать, крайне сложно объяснить зачем это нужно написать, и совершенно невозможно объяснить почему нужно написать именно это, а не что то иное.