我试图运行发送电子邮件与延迟,因为有条件发送电子邮件可以在相当长的一段时间内,我不想收到和无限量的电子邮件提醒。。。
为此,我正在尝试threading.timer来延迟它,并且每15分钟只发送一次电子邮件。。。我在.timer对象上尝试了长900秒的延迟,它工作了(使用的时间脚本)。。。但当我运行它发送电子邮件时,它首先发送电子邮件,然后进入计时器,而不是运行脚本的其他部分。。。电子邮件功能工作正常。。。运行Python2.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个时间就发一封邮件。。。i、 en=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秒收到一封邮件,而是在300秒后收到36封邮件??知道为什么吗?(从下面的评论重新格式化)
在阅读了关于线程的答案之后,我理解了这个问题。。。我对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"