2013-06-01 3 views
2

Недавно я практиковал создание веб-сайта с флягой. Теперь я столкнулся с проблемой.
Существует функция, которая позволяет выполнить регистрацию. Такой код:
программирование потоков в python

 
    def register(): 
     ... 
     some judgment 
     ... 
     if true: 
     sendmail() 
     return redirect(url_for('onepage')) 

Мой вопрос:
Когда брикетирования Sendmail(), это нужно много времени. Таким образом, пользователям приходится ждать момента, чтобы получить «одну страницу», около 4-5 секунд. Это принесет плохой опыт. Я знаю, что использование потоковой передачи может позволить этим двум функциям независимо друг от друга, но я изучил программирование в течение очень короткого времени, поэтому у меня нет опыта программирования потоков, может ли кто-нибудь предоставить мне некоторые идеи или примеры кода при этой проблеме?

ответ

4

Что вы хотите threading, а не низкого уровня thread. Для случая, это просто, не будет никакой необходимости подклассов threading.Thread, так что вы можете просто replase sendmail() по

threading.Thread(target=sendmail).start() 

после

import threading 
+0

ok.thanks Evpok! Я попробую! –

1

Существует несколько способов реализации потоков в Python. Одно очень простое решение для вас будет

import thread 
    def register(): 
     ... 
     some judgment 
     ... 
     if true: 
     thread.start_new_thread(sendmail,()) 
     return redirect(url_for('onepage')) 

Это запустит sendmail() асинхронно. Однако, если sendmail терпит неудачу или что-то возвращает, вам нужно будет использовать что-то еще.

Есть много учебников о многопоточности в Python, я нашел, что это очень приятно http://www.tutorialspoint.com/python/python_multithreading.htm

+0

Благодарности elactic! Это действительно полезно для меня! –

+0

Вы, добро пожаловать. Но Evpok прав, 'threading' может быть лучшим выбором над« Thread ». – elactic

1

Я не резьб решения: Я использую сельдерей для жесткие операции: отправка электронной почты, выборка url, создание множества записей базы данных, периодические задачи.

+ вы можете использовать приложение опоки и экземпляры сельдерея на различных серверах

- вам нужно бэкенд (RabbitMQ, Redis, MongoDB и т.д.)

+0

ОК. Спасибо, tbicr. Я посмотрю на колбу-сельдерей. Надеюсь, это поможет мне. Спасибо ~ –

+0

Из сельдерея 3.0 вы можете использовать только «сельдерей» без «колба-сельдерея». – tbicr

Смежные вопросы