Форум сайта python.su
подскажите. Как выполнить функцию при сохранений записи в бд.
Допустим есть мето save.
class SomeClass(models.Model): ... def save(...): # что-то делаю # после сохранения необходимо отправить сообщение
Офлайн
использовать очередь? что-то вроде http://python-rq.org/ http://www.celeryproject.org/
Офлайн
celery смотрел
но что-то не разобрался.
Мне просто надо выполнить функцию в отдельном потоке. Может питоновсии треад использовать?
Офлайн
Ну попробуйте, вот только надо быть внимательным - если функция в новом потоке будет выполняться дольше чем основной поток - как поведет себя Джанга. Т.е. не будет ли “простоя ожидания” на запрос.
import thread thread.start_new(...)
Офлайн
сделал вот так
def send_message(): try: send_mail('NewPostInBlog', 'message', 'mail', ['mail']) except: # временно pass threading.Thread(target=send_message).start()
Офлайн
В догонку, обычно для таких целей использую вот такой декоратор:
def async(f): def wrapper(*args, **kwargs): thr = Thread(target = f, args = args, kwargs = kwargs) thr.start() return wrapper
Офлайн