【问题标题】:python How to loop a function [duplicate]python如何循环一个函数[重复]
【发布时间】:2012-11-27 21:36:20
【问题描述】:

可能重复:
What is the best way to repeatedly execute a function every x seconds in Python?

嗨,这是我的代码:

client = myclient(info1,info2)
                sellor()
                Contractor()

它工作得很好,但我想做的是让 python 无限期地每 60 秒启动一次该代码...... 我实际上不明白如何将代码与时间循环放在一起 任何帮助表示赞赏 谢谢

【问题讨论】:

  • @eumiro 不是每个人都在使用 linux - 你使用的是什么操作系统? - 您可以使用time 模块,只需使用while 循环。
  • 这可能就是你要找的答案:stackoverflow.com/a/474543/363448

标签: python time


【解决方案1】:

如果 60 秒忽略了执行代码所需的时间):

from time import sleep

while True:
    sleep(60)
    # your code here

但如果 60 秒考虑到执行代码所需的时间:

from time import sleep
from os import fork       
while True:
    sleep(60)
    fork() # create child process
    # your code here

【讨论】:

  • 如果代码需要超过一秒的时间运行,这将不会“每 60 秒”运行一次
  • 感谢@eumiro,改进了答案
  • @mgilson 谢谢,我正在度过那些日子。
  • 很好的答案 - 但是如果你不根据fork 的返回值做一些不同的事情,你很快就会得到大量的进程......也许只是打电话如果返回 0,您的代码并退出?
【解决方案2】:

您可能还会想到只通过 Windows 调度程序来调度任务。这里的好处是一旦运行脚本就结束,然后在预定的时间间隔后再次执行脚本。在第二种方法中,脚本实例进程似乎会持续运行,并且只使用 sleep 函数在指定时间内什么都不做。如果脚本在任何情况下都失败,我会采用这种方式,您可能必须检查以重新启动脚本。作为计划的活动,脚本将在任何情况下以指定的时间间隔执行。

您可能也不希望进程线程继续运行以执行 python 脚本。我会对此进行研究,同时您可能会听到我们其他人的意见。

问候, 严酷的

【讨论】:

    【解决方案3】:

    您可以使用已经提到的睡眠。但由于您自己的函数运行所需的时间可能是可变的,这并不一定意味着您的函数每 60 秒运行一次。

    如果每次启动函数之间的时间间隔接近 60 秒很重要,则可以使用 time。我还没有尝试过,但是类似

    import time
    
    while True:
        # Get the current time 
        startTime = time.time()
    
        # Your functions
        client = myclient(info1,info2)
        sellor()
        Contractor()
    
        delay = True
        while delay:
            if time.time() - startTime > 60:
                delay = False # Break the delay
    

    【讨论】:

      【解决方案4】:
      import time
      
      repeat_time = 3.0
      
      while True:
          start_time = time.time()
      
          # Your code goes here
      
          time.sleep(max(repeat_time - (time.time() - start_time), 0.0))
      

      您的代码将在每个“repeat_time”执行一次

      【讨论】:

        【解决方案5】:
        import time
        
        while True:
        
          client = myclient(info1,info2)
                    sellor()
                    Contractor()
                    time.sleep(10)
        

        希望它有效,所有最好的伙伴

        【讨论】:

          【解决方案6】:

          使用sleep 方法。只需创建一个循环(while、for 等)并在每次迭代时休眠 60 秒。

          【讨论】:

          • 如果代码需要超过一秒的时间运行,这将不会“每 60 秒”运行一次
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-11-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-18
          • 1970-01-01
          相关资源
          最近更新 更多