Latest posts on Запуск процесса в фоне topichttps://python.su/forum/topic/997/2007-07-12T23:44:03+03:00Общий :: Python для экспертов :: Запуск процесса в фоне
2007-07-12T23:44:03+03:00slivlen6599<blockquote><em>Cyxapeff</em><br/>если кому интересно, то всё отлично работает в связке apache2+django. А вот на встроенном сервачке не хочет. Ну и ладно. )</blockquote>Сталкивался с похожей проблемой. Форкал cgi скрипт на питоне и дочерний процесс переводил в фоновый режим. При использовании стандартного mod_cgi сервер всегда ожидал завершения дочернего процесса или убивал его по таймауту. Проблема заключалась в самом mod_cgi и решилась путем перехода на mod_python.
Общий :: Python для экспертов :: Запуск процесса в фоне
2007-07-12T23:32:10+03:00Cyxapeff6597если кому интересно, то всё отлично работает в связке apache2+django. А вот на встроенном сервачке не хочет. Ну и ладно. )
Общий :: Python для экспертов :: Запуск процесса в фоне
2007-07-12T15:56:54+03:00Cyxapeff6593Спасибо. Тестовый скрипт работает как надо, а вот django всё равно ждёт завершения процесса. :(<br/>Но я думаю этот вопрос надо задавать не сюда.
Общий :: Python для экспертов :: Запуск процесса в фоне
2007-07-12T15:14:39+03:00slivlen6591<blockquote><em>Cyxapeff</em><br/>Пробовал добавить к аргументам “>”, “/dev/null”. Не помогает.</blockquote>'> /dev/null' - обрабатывает shell. os.execl - сразу загружает новую программу в текущий процесс и не вызывает командный интерпритатор.<br/>Как перенаправить вывод описано в комментах к ‘рецепту’(см. ссылку в моем предыдущем посте)
Общий :: Python для экспертов :: Запуск процесса в фоне
2007-07-12T14:51:44+03:00Cyxapeff6589Хм. Работает, но не совсем так как надо…<br/><br/><div class="code"><pre><span class="kn">import</span> <span class="nn">os</span>
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">fork</span><span class="p">()</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">os</span><span class="o">.</span><span class="n">execl</span><span class="p">(</span><span class="s">"/usr/bin/python"</span><span class="p">,</span> <span class="s">"convert"</span><span class="p">,</span> <span class="s">"/path/convert.py"</span><span class="p">,</span> <span class="s">"65"</span><span class="p">,</span> <span class="s">"/path/file.wmv"</span><span class="p">,</span> <span class="s">"/path/file.wmv.flv"</span><span class="p">)</span>
<span class="k">print</span> <span class="s">"test"</span>
</pre></div><br/>$ python test.py<br/>test<br/>$ FFmpeg version SVN-rUNKNOWN, Copyright © 2000-2007 Fabrice Bellard, et al. (и дальше вывод ffmpeg).<br/><br/>Пробовал добавить к аргументам “>”, “/dev/null”. Не помогает.<br/><br/>А django (это её view первый скрипт) вообще падает после этого. :(
Общий :: Python для экспертов :: Запуск процесса в фоне
2007-07-12T14:40:58+03:00slivlen6588<blockquote><em>Андрей Светлов</em><br/>Эээ… А зачем fork 2 раза? Мне обычно одного хватало smile</blockquote>Привычка :) 2 надо если демонизируешь процесс(<a href="http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66012%29%2C">http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66012),</a> а так действительно одного хватит.
Общий :: Python для экспертов :: Запуск процесса в фоне
2007-07-12T14:32:50+03:00Андрей Светлов6587Эээ… А зачем fork 2 раза? Мне обычно одного хватало :)
Общий :: Python для экспертов :: Запуск процесса в фоне
2007-07-12T14:05:47+03:00slivlen6585В самом простом случае это можно сделать так:<br/><div class="code"><pre><span class="c">#!/usr/bin/python</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">fork</span><span class="p">()</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">fork</span><span class="p">()</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">os</span><span class="o">.</span><span class="n">execl</span><span class="p">(</span><span class="s">'/bin/sleep'</span><span class="p">,</span> <span class="s">'sleep'</span><span class="p">,</span> <span class="s">'10'</span><span class="p">)</span>
</pre></div>Если же надо периодически запускать на выполнение какие-то команды из демона, то надо будет еще организовать сборку зомби с помощью os.wait()
Общий :: Python для экспертов :: Запуск процесса в фоне
2007-07-12T13:38:15+03:00pythonwin6584попробуй через нити
Общий :: Python для экспертов :: Запуск процесса в фоне
2007-07-12T12:43:30+03:00Cyxapeff6582Довольно глупый вопрос, но никак не могу понять как это делается.<br/>В одном скрипте, нужно в фоне запустить другой скрипт, который кое чего поделает и так же запустит пару программ (ffmpeg например). Пишу os.system(“python script2.py &”), но первый скрипт всё равно встаёт, дожидаясь выполнения второго. :(