gpt4 book ai didi

python - 在 Python 中执行定时器功能的正确方法

转载 作者:太空宇宙 更新时间:2023-11-04 09:20:47 24 4
gpt4 key购买 nike

我有一个 GUI 应用程序需要在后台做一些简单的事情(更新一个 wx python 进度条,但这并不重要)。我看到有一个 threading.timer 类..但似乎没有办法让它重复。因此,如果我使用计时器,我最终不得不在每次执行时创建一个新线程......例如:

import threading
import time

def DoTheDew():
print "I did it"
t = threading.Timer(1, function=DoTheDew)
t.daemon = True
t.start()

if __name__ == '__main__':
t = threading.Timer(1, function=DoTheDew)
t.daemon = True
t.start()
time.sleep(10)

这似乎是我在创建一堆线程,它们做了一件愚蠢的事情然后就死了。为什么不把它写成:

import threading
import time

def DoTheDew():
while True:
print "I did it"
time.sleep(1)


if __name__ == '__main__':
t = threading.Thread(target=DoTheDew)
t.daemon = True
t.start()
time.sleep(10)

我是否缺少让计时器继续做某事的方法?这些选项中的任何一个看起来都很愚蠢......我正在寻找一个更像 java.util.Timer 的计时器,它可以安排线程每秒发生一次......如果 Python 中没有办法,我上面的哪个方法更好,为什么?

最佳答案

更像这样的模式可能是您应该做的,但很难说,因为您没有提供很多细节。

def do_background_work(self):
# do work on a background thread, posting updates to the
# GUI thread with CallAfter
while True:
# do stuff
wx.CallAfter(self.update_progress, percent_complete)

def update_progress(self, percent_complete):
# update the progress bar from the GUI thread
self.gauge.SetValue(percent_complete)

def on_start_button(self, event):
# start doing background work when the user hits a button
thread = threading.Thread(target=self.do_background_work)
thread.setDaemon(True)
thread.start()

关于python - 在 Python 中执行定时器功能的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2906510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com