gpt4 book ai didi

Python:以固定间隔连续且可取消地重复执行

转载 作者:行者123 更新时间:2023-11-28 18:51:00 25 4
gpt4 key购买 nike

在能够立即终止执行程序(线程或进程)的同时,以固定间隔连续重复执行给定函数的最佳方法是什么?

基本上我知道两种方法:

  1. 使用无限循环的多处理和函数,最后使用 time.sleep。在任何状态下,处理都以 process.terminate() 终止。
  2. 使用线程并在线程函数结束时不断重新创建计时器。处理在休眠时被 timer.cancel() 终止。

(“在任何状态下”和“在 sleep 时”都可以,尽管后者可能不是即时的)。问题是我必须同时使用多处理和线程,因为后者似乎不适用于 ARM(python 解释器和 vim 的一些模糊交互,在 vim 之外一切都很好)(我在那里使用第二种方法,还没有尝试过threading+cycle;目前没有代码),前者产生了太多我不想看到的进程,除非真的需要。这导致了一个问题,即必须对两种不同的方法进行编码,而使用循环的 threading 只是更多的导入,用于替换 中包装的所有 multiprocessing 内容if/else(除了没有 thread.terminate())。有没有更好的方法来完成这项工作?

目前使用的代码是here (目前这两项工作都有周期),但我认为回答这个问题用处不大。

更新:我使用这个解决方案的原因是在 vim statusline 的版本控制系统中显示文件状态(以及其他一些东西,如分支)的功能。这些状态必须更新,但如果不使用钩子(Hook)就不能立即更新它们,我不知道如何临时设置钩子(Hook)并在 vim 退出时删除而不可能破坏用户配置。因此标准解决方案是缓存在 N 秒后过期。但是当缓存过期时我需要做一个昂贵的 shell 调用并且延迟似乎很明显,IO 负载越重越明显。我现在正在实现的是在一个单独的进程中每 N 秒更新一次查看缓冲区的值,因此延迟困扰着那个进程而不是我。线程也可能工作,因为 GIL 不会影响对外部程序的调用。

最佳答案

我不清楚为什么在任务上无限循环的单个长生命周期线程对您不起作用?或者为什么您最终在多进程选项中有许多进程?

我的第一 react 是一个带有队列的单线程来为它提供待办事项。但我可能误解了这个问题。

关于Python:以固定间隔连续且可取消地重复执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13144176/

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