python timer函数_Python,threading.timer对象将不运行函数timer?

我试图运行发送电子邮件与延迟,因为有条件发送电子邮件可以在相当长的一段时间内,我不想收到和无限量的电子邮件提醒。。。

为此,我正在尝试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"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值