LINUX.ORG.RU

Апач, питон, зомби


0

0

Задача такая, юзер аплоадит видеофайл, апач его принимает, и запускает в фоновом режиме обработку этого видео. Для этого создаю процесс отдельный:

pid = os.fork()
        if pid == 0:
        os.execv('create_preview.py',
                     ['create_preview.py',
                      '-a', str(asset_id),
                      '-i', self.path,
                      '-s', '%sx%s' % (width, height),
                      '-o', preview_path])

В общем, все нормально работает, апач отдает ответ, скрипт нормально завершается, но вместо того чтоб умирать становится зомби. Понятно, чтоб он помер до конца нужно чтоб родитель у него взял код завершения, но где и как его взять?

Может я что-то совсем не так делаю?

anonymous
Ответ на: комментарий от anonymous

В данном случае это не так удобно будет.

Проблему решил двойным форком. Теперь процесс становится чайлдом иниту, а он периодически прибивает зомбей. 

Юнегс рулит :)

 # Double-fork magic in order to avoid zombie processes
        pid = os.fork()
        if pid == 0:
            os.setsid()
            pid1 = os.fork()
            if pid1 == 0:
                os.execv('create_preview.py',
                         ['create_preview.py',
                          '-a', str(asset_id),
                          '-i', self.path,
                          '-s', '%sx%s' % (width, height),
                          '-o', preview_path])
            else:
                os._exit(0)
        else:
            os.wait()

anonymous
()

Подозреваю, что правильный ответ зависит от используемого PM. Если create_preview.py всегда запускается из одного процесса, можно перед fork делать неблокирующийся wait.

tailgunner ★★★★★
()

А если загрузят одновременно 1000 файлов, у тебя запустится 1000 процессов, и все будут пережимать видео? Я бы отдельного демона запустил и очередь организовал.

ero-sennin ★★
()
Ответ на: комментарий от ero-sennin

Пока расчитываем на 20.

Хотя резон в ваших словах есть. Но дедлайн жмет, зараза.

Капча powezed вселяет надежду :)

anonymous
()
Ответ на: комментарий от ero-sennin

Не, идея с демоном крута, со временем так и сделаем, наверное, спасибо.

anonymous
()

оффтоп

прочитал заголовок и понял что компютерщики *нутые наркоманы. индеец,змея и зомби... замечательно

Damned
()

отдельный демон - единственно правильное решение, т.к. неизвестно, сколько и каких файлов в какой момент вам вгрузят злобные юзвери.

barbuza
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.