有没有一种解决方案可以让您在线程中每隔指定的秒数执行一项任务而不让它进入睡眠状态?

Posted

技术标签:

【中文标题】有没有一种解决方案可以让您在线程中每隔指定的秒数执行一项任务而不让它进入睡眠状态?【英文标题】:Is there a solution that allows you to perform a task every specified number of seconds in a thread without putting it to sleep? 【发布时间】:2021-03-24 07:52:30 【问题描述】:

like in questien 有没有一种解决方案可以让你在线程中每隔指定的秒数执行一项任务,而不会让它在 python 中进入休眠状态?

【问题讨论】:

请阅读How to Ask,也请阅读tour。关键是,建议是/否作为答案的问题通常没有真正的帮助。 仅供参考,还请阅读“XY 问题”一词。 【参考方案1】:

以下代码每 30 秒运行一次 thread1:

import threading

def thread1:
    pass
    L1.acquire()


if "__name__" == "__main__":
    specific_time = 30
    t1 = threading.Thread(target=thread1)
    L1 = threading.Lock(blocking=True)
    t1.start()
    init_time  = time.time()
    while 1:
        if (time.time() - init_time) >= specific_time:
            L1.release()
            init_time = time.time()

【讨论】:

【参考方案2】:

第一种方式

你可以使用threading.Timer来做到这一点

from threading import Timer

def hello():
    print "hello, world"

t = Timer(30.0, hello)
t.start() # after 30 seconds, "hello, world" will be printed

第二种方式

只需检查特定时间是否已过。然后在一个线程中运行your_function()

import time

current_milli_time = lambda: int(round(time.time() * 1000))

def your_function():
  last_run_millis = current_milli_time()
  while 1:
    now_millis = current_milli_time()
    delta_time = now_millis - last_run_millis
    if delta_time > 3000:
      last_run_millis = now_millis
      print("Do your stuff here")

your_function()

【讨论】:

以上是关于有没有一种解决方案可以让您在线程中每隔指定的秒数执行一项任务而不让它进入睡眠状态?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法计算自启动以来的秒数?

UIView 动画发生的速度比指定的秒数快

python延时函数

spring @Scheduled说明

如何在Python中获取自特定时间以来的秒数

Cron 表达式详解