如何计算python程序启动后1小时的时间?

如何计算python程序启动后1小时的时间?,python,multithreading,Python,Multithreading,我想问:如何编写一个python程序来计算自从我们启动python程序以来已经过去了1个小时 我举一个例子: -我们在17:00:00开始了python程序 -运行1小时(18:00:00)后,python程序将打印一条消息,通知1小时已经过去 我能想出一个python程序。首先,我记录启动程序的时间(称为start\u time),然后连续记录下一次(称为end\u time)。如果(end\u time-start\u time==1小时),它将打印一条消息 然而,这个程序似乎浪费了太多的C

我想问:如何编写一个python程序来计算自从我们启动python程序以来已经过去了1个小时

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

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

然而,这个程序似乎浪费了太多的CPU性能!我需要一个程序,采取较少的CPU性能

编辑: 我需要如下

我有一个线程名
等待事件\u线程
。这是一个阻塞线程。如果未设置事件
触发器
,则此线程被阻止。 在阻塞时间内,如果已经过了1小时,该线程将打印一条消息。 这是我的期望

之前,我说过我会持续记录下一次(call
end\u time
)。这意味着我打算从阻塞线程改为非阻塞线程,因为我不知道如果1小时过去了,如何在阻塞线程中打印消息。但非阻塞线程似乎占用了如此多的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()

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


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

您可以利用多线程,创建一个独立于代码其余部分运行的线程。该线程只需休眠1小时,然后打印“1h已通过”,然后再休眠1小时

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

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

  import _thread

  if __name__=="__main__":
   #
   # your init code here
   #
   try:
    _thread.start_new_thread( print_message_every_interval, \
     ("Timer-1h", "One hour have passed", 3600 ) )
   except Exception as e:
    print('could not start new thread')
    print(e)
   #
   # the rest of your code here
   #
当然,您可以使用许多多线程库来使代码看起来更漂亮。类似于
线程
模块

您可以在此处找到有关此主题的更多信息:

您可以利用多线程,创建一个独立于代码其余部分运行的线程。该线程只需休眠1小时,然后打印“1h已通过”,然后再休眠1小时

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

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

  import _thread

  if __name__=="__main__":
   #
   # your init code here
   #
   try:
    _thread.start_new_thread( print_message_every_interval, \
     ("Timer-1h", "One hour have passed", 3600 ) )
   except Exception as e:
    print('could not start new thread')
    print(e)
   #
   # the rest of your code here
   #
当然,您可以使用许多多线程库来使代码看起来更漂亮。类似于
线程
模块

您可以在此处找到有关此主题的更多信息:

我建议一小时后使用

`time.sleep(t)` 

其中
t
尽可能高,而不影响您的程序。

我建议您在一小时后使用

`time.sleep(t)` 

其中,
t
在不影响程序的情况下尽可能高。

启动一个线程,该线程将在每小时后调用一个函数并打印消息。 您可以使用主函数编写如下代码: 导入线程

def print():
    print "One Hour has been passed"

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

这将在每小时后调用打印函数并打印消息。

启动一个线程,该线程将在每小时后调用函数并打印消息。 您可以使用主函数编写如下代码: 导入线程

def print():
    print "One Hour has been passed"

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

这将在每小时后调用打印功能并打印消息。

因为您需要使用的超时参数,并检查是否在返回时设置了事件:

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()

因为您需要使用的超时参数,并检查是否在返回时设置了事件:

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()

您可以使用。你也应该包括一个你迄今为止尝试过的最简单的例子,这样其他人可以更好地帮助你。你能读一下吗?你有一个函数和一个变量同名,这会引起问题。另外,如果你需要她的帮助,你需要给她贴上“so@IljaEverilä”的标签,我恐怕不明白你所说的阻塞线程是什么意思。触发器是线程应该等待的事件、条件或其他同步对象(看起来是这样),但它应该在一个小时后恢复以通知它。那之后会发生什么?它应该继续等待吗?程序应该退出吗?例如,
Event.wait()
接受一个作为浮点秒的超时,在该超时之后,即使没有设置标志,它也会继续。您是否正在寻找类似
的东西,而不是触发器。wait(timeout=3600):
+循环内的打印(如果使用
事件
)?换句话说:什么是
触发器
?您可以使用。你也应该包括一个你迄今为止尝试过的最简单的例子,这样其他人可以更好地帮助你。你能读一下吗?你有一个函数和一个变量同名,这会引起问题。另外,如果你需要她的帮助,你需要给她贴上“so@IljaEverilä”的标签,我恐怕不明白你所说的阻塞线程是什么意思。触发器是线程应该等待的事件、条件或其他同步对象(看起来是这样),但它应该在一个小时后恢复以通知它。那之后会发生什么?它应该继续等待吗?程序应该退出吗?例如,
Event.wait()
接受一个作为浮点秒的超时,在该超时之后,即使没有设置标志,它也会继续。您是否正在寻找类似
的东西,而不是触发器。wait(timeout=3600):
+循环内的打印(如果使用
事件
)?换句话说:什么是
触发器
?用秒来比较小时数?不需要秒级分辨率!任何程序员都不会使用