Форум сайта python.su
Довольно глупый вопрос, но никак не могу понять как это делается.
В одном скрипте, нужно в фоне запустить другой скрипт, который кое чего поделает и так же запустит пару программ (ffmpeg например). Пишу os.system(“python script2.py &”), но первый скрипт всё равно встаёт, дожидаясь выполнения второго. :(
Офлайн
попробуй через нити
Офлайн
В самом простом случае это можно сделать так:
#!/usr/bin/python import os if os.fork() == 0: if os.fork() == 0: os.execl('/bin/sleep', 'sleep', '10')
Офлайн
Эээ… А зачем fork 2 раза? Мне обычно одного хватало :)
Офлайн
Андрей СветловПривычка :) 2 надо если демонизируешь процесс(http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66012), а так действительно одного хватит.
Эээ… А зачем fork 2 раза? Мне обычно одного хватало smile
Офлайн
Хм. Работает, но не совсем так как надо…
import os if os.fork() == 0: os.execl("/usr/bin/python", "convert", "/path/convert.py", "65", "/path/file.wmv", "/path/file.wmv.flv") print "test"
Офлайн
Cyxapeff'> /dev/null' - обрабатывает shell. os.execl - сразу загружает новую программу в текущий процесс и не вызывает командный интерпритатор.
Пробовал добавить к аргументам “>”, “/dev/null”. Не помогает.
Офлайн
Спасибо. Тестовый скрипт работает как надо, а вот django всё равно ждёт завершения процесса. :(
Но я думаю этот вопрос надо задавать не сюда.
Офлайн
если кому интересно, то всё отлично работает в связке apache2+django. А вот на встроенном сервачке не хочет. Ну и ладно. )
Офлайн
CyxapeffСталкивался с похожей проблемой. Форкал cgi скрипт на питоне и дочерний процесс переводил в фоновый режим. При использовании стандартного mod_cgi сервер всегда ожидал завершения дочернего процесса или убивал его по таймауту. Проблема заключалась в самом mod_cgi и решилась путем перехода на mod_python.
если кому интересно, то всё отлично работает в связке apache2+django. А вот на встроенном сервачке не хочет. Ну и ладно. )
Офлайн