在能够立即终止执行程序(线程或进程)的同时以固定间隔连续重复执行给定函数的最佳方法是什么?
基本上我知道两种方法:
- 最后使用无限循环
time.sleep
的多处理和函数。处理process.terminate()
以任何状态终止。 - 使用线程并在线程函数结束时不断重新创建计时器。
timer.cancel()
处理在睡眠时终止。
(“处于任何状态”和“睡觉时”都可以,即使后者可能不是即时的)。问题是我必须同时使用多处理和线程,因为后者似乎不适用于 ARM(python 解释器和 vim 的一些模糊交互,在 vim 之外一切都很好)(我在那里使用第二种方法,没有尝试过线程+循环;目前没有代码),前者产生了太多的进程,除非真的需要,否则我不想看到。这导致了一个问题,即必须编写两种不同的方法,而threading
使用循环只是为了替换所有包含在/中的multiprocessing
东西的直接替换(除了没有 )。有没有更好的方法来完成这项工作?if
else
thread.terminate()
当前使用的代码在这里(目前两个工作都有循环),但我认为回答这个问题不会有多大用处。
更新:我使用此解决方案的原因是在 vim 状态行的版本控制系统中显示文件状态(以及其他一些东西,如分支)的功能。这些状态必须更新,但是如果不使用钩子就无法立即更新它们,而且我不知道如何临时设置钩子并在 vim 退出时删除而不会破坏用户配置。因此标准解决方案是缓存在 N 秒后过期。但是当缓存过期时,我需要进行昂贵的 shell 调用,并且延迟似乎很明显,IO 负载越重越明显。我现在正在实施的是在单独的过程中每 N 秒更新一次查看缓冲区的值,因此延迟会困扰该过程而不是我。由于 GIL 不影响对外部程序的调用,因此线程也可能起作用。