【问题标题】:Python call a function every x minutes [closed]Python每x分钟调用一个函数[关闭]
【发布时间】:2019-06-12 21:17:17
【问题描述】:

如何在python中创建一个定时器,每x分钟调用一个函数,而不让整个代码等待?

【问题讨论】:

  • 如果你想让任何人理解你想要做什么,你需要修正缩进。
  • 示例代码的缩进无处不在。您能否详细说明“不延迟整个程序”的含义?您是否希望您的计数器(它是向上计数还是向下计数?)在单独的线程中运行?程序的其余部分是否有一个可以调用计数器代码的主循环?
  • 问题不清楚。尝试添加示例输出:\
  • 听起来很简单,但一种方法是围绕多个线程重新设计,其中一个线程可以专门用于生成这些“定时器”事件。

标签: python python-3.x time


【解决方案1】:

我不能 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 循环做什么都被阻塞或延迟。这应该是您正在寻找的。 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)

【讨论】:

  • 不,因为没有时间延迟,所以一切都在 0.0001 秒内计算...你自己试试
  • 啊,您正在寻找每秒 10、9、8、7、6、5、4、3、2、1、0 并重复的倒计时?我已经为你更新了我的答案! c:
  • @Snuggle 那也不行……
  • @TijmenMeijer 我可以要求更多说明吗?它怎么不工作?您希望代码执行它当前未执行的操作吗? ?
  • @Snuggle 我希望我的 while 循环继续运行而没有任何时间延迟,但是在这个循环期间,我想设置一个不涉及我的常规循环的计时器。希望你能帮助我。
【解决方案2】:

使用这样的东西:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 2010-11-16
    • 2017-11-15
    • 1970-01-01
    • 2017-06-13
    相关资源
    最近更新 更多