如何在不延迟while循环的情况下设置计时器?

时间:2019-06-12 21:17:17

标签: python python-3.x time

我正在用python 3创建一个应用程序,如果wind> 5 bft,它会向您发送一封电子邮件。 我不想每秒发送1000次电子邮件,因为它在我的while循环中。我希望我的程序发送电子邮件,而不是等待大约15分钟,然后再次发送电子邮件。 怎么做?附言我不想将程序延迟15分钟,我只想在15分钟后重复执行某些操作。

2 个答案:

答案 0 :(得分:2)

由于您的示例代码当前缩进不正确,所以我不能100%地确定您要问的问题。

我假设您的意思是这样的:

import time
wait = 10
for i in range(wait):
    wait -= 1
    time.sleep(1)
    print(wait)

如果仅删除time.sleep(1),则倒计时将不再发生延迟。这应该起作用:

wait = 10
for i in range(wait):
    wait -= 1
    print(wait)

[编辑] 啊,非常感谢您的澄清!我相信这就是您要寻找的:

import time
while True: # Here is your while loop!
    wait = 10 # Change this to 900 (seconds) to get 15 minutes.
    for i in range(wait+1):
        print(wait)
        wait -= 1
        time.sleep(1) # Delay for one second.

    print("Send email here!")

[双击编辑] 哦,您希望发送电子邮件不会阻塞程序的主要部分! @ kenny-ostrom所说的在这里是正确的,那么,您想以某种方式使用线程。这是每15分钟或900秒发送一封电子邮件的示例。这种情况发生在后台,而while循环所做的一切 NOT 均被阻止或延迟。这应该是您要寻找的。 c:

import threading, time
def send_my_email():
    while True:
        time.sleep(3) # Every 15 minutes is 900.
        print("Send email now saying: {}".format(email_content))

thread = threading.Thread(target=send_my_email)
thread.start()
# Make a background thread and use the function: send_my_email

while True:
    # Do anything here. No delays will happen.
    for number in range(10, 0, -1):
        print(number)
        email_content = number*3 # You can modify email content here.
        time.sleep(1)

答案 1 :(得分:1)

使用类似这样的内容:

wait = 10
startTime = time.time()
while wait > 0:
    if time.time()-startTime >= 1:
        startTime = time.time()
        print(wait)
        wait-=1
    #do other things