gpt4 book ai didi

python - 在python中停止定时线程

转载 作者:太空宇宙 更新时间:2023-11-04 10:50:51 26 4
gpt4 key购买 nike

当主脚本被终止时,我正试图停止 python 中的线程。但是由于线程每小时启动一次,我该如何立即停止线程?

def interval():
###the actual work being done here###
try:
threading.Timer(3600, interval).start()
except (KeyboardInterrupt, SystemExit):
print "Exiting"
cleanup_stop_interval();
sys.exit()
interval()

最佳答案

您可以考虑在这里使用 sched.scheduler 而不是 threading.Timer。需要注意一些差异:

  • sched.scheduler 在主进程中运行一切,而不是在线程。
  • 如果当前进程花费的时间超过 delay 秒,则预定事件将在当前调用 interval 之后开始完成。 threading.Timer 的工作方式不同——如果工作在interval 需要超过一个小时,将运行多个线程间隔并发。

我猜你真的不希望同时运行一个以上的interval,所以sched.scheduler 在这里可能比threading 更合适。计时器


import timeit
import sched
import time
import logging
import sys

logger = logging.getLogger(__name__)
logging.basicConfig(level = logging.DEBUG,
format = '%(threadName)s: %(asctime)s: %(message)s',
datefmt = '%H:%M:%S')
schedule = sched.scheduler(timeit.default_timer, time.sleep)
delay = 5 # change to 3600 to schedule event in 1 hour

def interval():
logger.info('All work and no play makes Jack a dull boy.')
schedule.enter(delay = delay, priority = 1, action = interval, argument = ())
# Uncomment this to see how scheduled events are delayed if interval takes a
# long time.
# time.sleep(10)

schedule.enter(delay = 0, priority = 1, action = interval, argument = ())
try:
schedule.run()
except (KeyboardInterrupt, SystemExit):
print('Exiting')
sys.exit()

关于python - 在python中停止定时线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14030578/

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