Im пытается запустить отправить электронное письмо с задержкой, так как условное отправление электронной почты может быть включено в течение некоторого времени, и я не хочу получать и бесконечное количество уведомлений по электронной почте ...Python, threading.timer объект не будет запускать таймер функции?
Для этого я ' m пытается запустить threading.timer, чтобы дать ему задержку и отправлять по электронной почте только каждые 15 минут ... Я пробовал длительную 900-секундную задержку на объекте .timer, и он работает (используется сценарий времени) ... но когда я запускаю его чтобы отправить сообщение электронной почты он сначала отправляет сообщение электронной почты, а затем вводит таймер не работает другие части сценария ... функция электронной почты работает просто отлично ... работает Python 2.6.6
#!/usr/bin/env python
import time
import smtplib #for sending emails when warning
import threading
if True: #the possibility exists that the conditional is met several times thus sending lots of emails
t = threading.Timer(300,send_email('Tank temperature Overheat',tank_temp))
t.start() # after 300 seconds, the email will be sent but the script will keep running
print "rest of the script keeps running"
print "keeps running the scrpit and after 300s the email is sent"
Любые идеи о том, почему его не работает или другой обходной путь?
После игры с ним ... он делает сон, но отправляет все письма ... не один электронной почты каждый X количество .time множества ... т.е.
n=300
start = time.time()
while (time.time() - start < n):
led_temp = 56
if led_temp > 55:
t = threading.Timer(100, lambda: send_email('Lights temperature Overheat',led_temp))
t.start()
Вместо того, чтобы получать одно письмо каждые 100 секунд я получаю 36 писем через 300 секунд .. ?? Любая идея почему? (Reformat из комментария ниже)
После прочтения ответа на вопросник я понял проблему ... Я все еще знал, что на python и никогда не работал с пользователем, поэтому я предполагаю, что это была основная причина из 36 писем, которые я получил при создании бесконечное количество нитей ... Я установил его с помощью флага, и протестировали такой код:
def raise_flag():
global start
interval = 300
if start > interval:
start = 0
flag = True
print "Flag True, sending email"
return flag
else:
flag = False
start = start + 1
print "Flag OFF", start
time.sleep(1)
return flag
led_temp = 27
while led_temp > 26:
flag = raise_flag()
if flag:
send_email('Tank temperature Overheat',led_temp)
flag = False
print "Sent email"
работает как шарм. Я все еще новичок в python и не видел функцию лямбда. Я сделаю некоторое чтение. – user2520982
После игры с ним ... он выполняет сон, но отправляет все письма. .. не один адрес электронной почты каждый X количество .time множества ... т.е. ' п = 300 начало = time.time() в то время как (time.time() - начало <п): led_temp = 56 , если led_temp> 55: (: 'температура Свет Перегрев' send_email (, led_temp) 100, лямбда) t.start() ' Если т = threading.Timer Я запускаю этот код Im, имитируя временное предупреждение, превышающее значение в течение 300 секунд. Вместо того, чтобы получать по электронной почте каждые 100 секунд, я получаю 36 писем через 300 секунд .. ?? Любая идея почему? – user2520982
@ user2520982 Можете ли вы отредактировать свой вопрос и рассказать о проблемах сейчас? Код в комментариях вообще не читается. Электронные письма AFAIK не гарантируются мгновенно, поэтому поставщики и т. Д. Могут одновременно отправлять более одного электронного письма. – Bakuriu