当前位置: 首页 > 面试题库 >

每N秒定期在线程中实时执行函数

袁致远
2023-03-14
问题内容

我有一个线程类,其循环需要每秒执行4次。我知道我可以做类似的事情

do_stuff()
time.sleep(0.25)

但问题是这并不能解决您花费的时间do_stuff()。实际上,这需要是一个实时线程。有没有办法做到这一点?理想情况下,当不执行代码时,线程仍将处于休眠状态。


问题答案:

简单的解决方案

import threading

def work (): 
  threading.Timer(0.25, work).start ()
  print "stackoverflow"

work ()

上面的代码可以确保work以每秒四次的间隔运行,其背后的理论是它将 “排队” 对自己的呼叫,该呼叫将在未来 0.25
秒内运行,而不会等待发生这种情况。

因此,它几乎可以不间断地完成工作,并且我们非常接近每秒精确执行4次该功能。

threading.Timer通过以下指向python文档的链接可以阅读更多信息:

  • docs.python.org-16.2.7。 计时器对象

推荐]更高级/动态的解决方案

即使先前的函数按预期工作,您也可以创建一个辅助函数来帮助处理将来的定时事件。

下面的内容对于该示例来说足够了,希望代码能说明一切-它不像看起来的那样先进。

当您可以实现自己的包装程序来满足自己的确切需求时,可以将其视为一种启发。

import threading

def do_every (interval, worker_func, iterations = 0):
  if iterations != 1:
    threading.Timer (
      interval,
      do_every, [interval, worker_func, 0 if iterations == 0 else iterations-1]
    ).start ()

  worker_func ()

def print_hw ():
  print "hello world"

def print_so ():
  print "stackoverflow"


# call print_so every second, 5 times total
do_every (1, print_so, 5)

# call print_hw two times per second, forever
do_every (0.5, print_hw)


 类似资料:
  • 本文向大家介绍python每隔N秒运行指定函数的方法,包括了python每隔N秒运行指定函数的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python每隔N秒运行指定函数的方法。分享给大家供大家参考。具体如下: 这是一个类似定时器的效果,每隔指定的秒数运行指定的函数,采用线程实现,代码简单实用。 希望本文所述对大家的Python程序设计有所帮助。

  • 本文向大家介绍Laravel定时任务的每秒执行代码,包括了Laravel定时任务的每秒执行代码的使用技巧和注意事项,需要的朋友参考一下 laravel中的任务调度可以不将每条命令都写入crontab,便于管理维护,而且可以基于laravel框架环境运行,而不需写独立的脚本执行,非常方便,但是最小的执行间隔也是一分钟,要想达到每秒执行的效果,就要借助shll脚本了,在shell脚本里循环60次每秒执

  • 问题内容: 如何控制/限制提交给的任务?我已经发送了SMS消息,并且我需要控制执行程序,以便它最多只能以每秒N条消息的速度发送。 问题答案: 假设您为每个任务创建一条SMS消息,则可以使用ScheduleExecutorService。 将任务添加到队列中,它们将以每秒10个的速度处理。

  • 问题内容: 我想每60秒在Python上执行一个函数,但是我不想同时被阻塞。 如何异步进行? 使用此代码,函数f在20秒time.time中每3秒执行一次。最后,它给出了一个错误,我认为这是因为threading.timer尚未被取消。 如何取消呢? 提前致谢! 问题答案: 您可以尝试threading.Timer类:http : //docs.python.org/library/threadi

  • 问题内容: 以给定的速率安排一段Java代码的最简单方法是什么? 问题答案: 在Java 5+中,带有: 上面的方法是有利的。在Java 5之前,您使用和:

  • 问题内容: 我想每0.5秒触发一次功能,并且能够启动,停止和重置计时器。我不太了解Python线程的工作方式,并且在使用python计时器时遇到了困难。 但是,当我执行两次时,我会不断得到帮助。有没有解决的办法?我尝试在每次开始之前申请。 伪代码: 问题答案: 最好的方法是一次启动计时器线程。在计时器线程中,你需要编写以下代码 然后,在启动计时器的代码中,可以停止事件来停止计时器。