如何计算一个Python程序开始后已经过去了1小时?

2024-04-20 09:07:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我想问:如何编写一个python程序来计算1个小时已经过去了,因为我们启动了一个python程序?在

我举个例子: -我们在17:00:00启动了python程序 -运行1小时后(18:00:00),python程序将打印一条消息,通知1小时已过。在

我能想出一个python程序。首先,我记录启动程序的时间(称为start_time),然后连续记录下一个时间(称为end_time)。如果(end_time-start_time==1小时),它将打印一条消息。在

但是这个程序似乎浪费了太多的CPU性能!我需要一个CPU性能更低的程序。在

编辑: 我需要如下。在

我有一个线程名wait_an_event_thread。它是一条阻塞线。如果没有设置事件trigger,则此线程被阻塞。 在阻塞时间内,如果已经过了1小时,这个线程将打印一条消息。 这是我的期望。在

之前,我说过我下一次连续录制(call end_time)。这意味着我打算从阻塞线程更改为非阻塞线程,因为我不知道如何在阻塞线程中打印消息,如果一个小时过去了。但似乎非阻塞线程占用了太多的CPU性能。在

这是我的代码:
我的期望是:阻塞线程

def wait_an_event_thread(trigger):
    trigger.wait()
    # If 1 hour has been passed, it print a message
    # How to print message if 1 hour has been passed in this blocking thread if the "trigger" event is not set??

trigger  = threading.Event()
wait_an_event_thread = threading.Thread(name='wait_an_event_thread', 
                       target=wait_an_event_thread,
                       args=(trigger,))
wait_an_event_thread.start()

Tags: 程序anevent消息time时间cpu性能
3条回答

您可以利用多线程并创建一个独立的线程,该线程独立于其余代码运行。又睡了一个小时,然后又睡了一个小时。在

要将其转换为代码形式,您将需要以下内容: 在

import time
def print_message_every_interval( threadName, message, interval=3600, ):
   while True:
      time.sleep(interval) #interval in seconds
      print ("%s: %s: %s" % ( threadName, time.ctime(time.time()), message ))

在main()中添加以下内容:

^{pr2}$

当然,您可以使用许多多线程库使代码看起来更漂亮。就像threading模块。在

您可以在此处找到有关此主题的更多信息: https://www.tutorialspoint.com/python3/python_multithreading.htm

import threading

def func():
    #your code here

t = threading.Timer(3600, func)
t.start()

More details in documentation

感谢@Ilja EveriläIlja Everilä的更正和改进

事实证明,您需要使用^{}timeout参数,并检查返回时是否设置了事件:

def wait_an_event_thread(trigger):
    while not trigger.wait(3600):
        print "1 hour has passed"

    # Do what must be done when triggered

trigger = threading.Event()
the_thread = threading.Thread(name='wait_an_event_thread', 
                              target=wait_an_event_thread,
                              args=(trigger,))
the_thread.start()

如果没有设置事件,这将在小时(ish)间隔之间继续打印诊断消息。Event.wait()might behave badly if your system clock jumps backwards。在

相关问题 更多 >