Форум сайта python.su
Есть вид внутри которого запускаю поток:
def(req):
from threading import Thread
import time
def go():
while 1:
print 'mega task process'
time.sleep(5)
t = Thread(target=go,args=())
t.start()
Офлайн
А блин сам же и ответил на свой вопрос)
thread_store = []
def directory(request, page=1):
from threading import Thread
import time
def go():
while 1:
print 'mega task process'
time.sleep(5)
t = Thread(target=go,args=())
t.start()
print t
thread_store.append(t)
Офлайн
насколько вообще коректно такое решение, для запуска переодически выполняющихся действий запустить в views.py приложения в отдельном потоке требуемую задачу, какие есть подводные камни? или может это как то более грамотно можно сделать?
Офлайн
Можно вот так http://www.lyabah.com/?p=312
создавать джанговские stand alone скрипты, которые к примеру, будут запускаться раз в минуту, и проверять в базе, нет ли отложеных заданий для них. А во вьюхе оставлять задания.
Офлайн
а в чем преимущества? меня больше интресует инициализация потока - вижу проблемы в том что нужно настраивать крон и потом еще решать проблему чтобы крон не запускал несколько копий скрипта паралельно.
В моем же случае на сколько я понимаю,просто запускается поток когда view.py запускается - те только один раз, и крутится себе отдельно, без вышепречисленных проблем.
может тот случай лучше тем что если у меня что грохнется в потоке то он заново не поднимится, но это опять же можно ловить try catch + добавить в какой нить вьюхе на то чтобы поток работал проверку.
Отредактировано (Май 14, 2009 20:48:25)
Офлайн
EvgАбсолютно некорректно.
насколько вообще коректно такое решение, для запуска переодически выполняющихся действий запустить в views.py приложения в отдельном потоке требуемую задачу, какие есть подводные камни?
EvgДа, перестать использовать веб сервер для тех задач, для которых он не предусмотрен.
или может это как то более грамотно можно сделать?
EvgТам нечего настраивать:-)
вижу проблемы в том что нужно настраивать крон
EvgЛюбой разделяемый лок - файловый например.
потом еще решать проблему чтобы крон не запускал несколько копий скрипта паралельно.
EvgПроблемы смотри выше. И то это только самые очевидные.
В моем же случае на сколько я понимаю,просто запускается поток когда view.py запускается - те только один раз, и крутится себе отдельно, без вышепречисленных проблем.
Офлайн
Daevaornбуду благодарен если про эти пункты по подробнее раскажете) почему может быть несколько?
- Процессов может быть несколько
- Неконтролируемость
Daevaornсуществуют ли способы тогда породить их в отдельном процесе,чтобы они не умерали вслед за ициицирующим их процессом?
- Процесс может умереть в любой момент, потащив за собой все треды
Офлайн
Daevaornтреды привязываются к процессу, и контролироваться могут только им, а на сервере у тебя сразу вращается несколько джанго-процессов. Поэтому запрос на старт таска может прийти на один процесс, а стоп на другой.
- Процессов может быть несколько
- Неконтролируемость
Офлайн
Oduvanну у меня там нету стартов стопов тасков, мне просто нужна вещь которая бы постоянно выполнялась - а именно доставала юезеров которые давно не были на сайте и делало им напоминание на почту.
Поэтому запрос на старт таска может прийти на один процесс, а стоп на другой.
Отредактировано (Май 15, 2009 00:21:34)
Офлайн
Еще бы хотелось услышать мнения насчет такой схемы:
сделать отдельный файл который запускает все потоки, и запускать его из вида например как отдельный питон скрипт, т.е ‘python script.py’ тогда у всех потоков будет свой отдельный процесс, и сделать чтобы он себя как то помечал что запушен, чтобы дубликаты его не запустились, ну то есть как обычный крон только на питоне получится.
Офлайн