gpt4 book ai didi

python - 如何在不退出现有循环的情况下安排任务?

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

我已经为这个问题苦苦挣扎了大约一个星期——是时候问问能在几分钟内给出答案的人了。

我正在尝试每 10 秒运行一次 python 程序。有很多这类问题:Use sched module to run at a given time , Python threading.timer - repeat function every 'n' seconds , How to execute a function asynchronously every 60 seconds in Python?

通常使用 schedtime.sleep 的解决方案会起作用,但我试图从 cmd2 中启动一个计划进程,这已经在 while False 循环中运行。 (当您退出 cmd2 时,它会退出此循环)。

因此,当我启动一个每 10 秒重复一次的函数时,我进入了嵌套在 cmd2 中的另一个循环,并且我无法输入 cmd2 命令。我只能通过退出重复函数的子循环返回到 cmd2,因此函数停止重复。

显然线程将解决这个问题。我试过 threading.Timer 但没有成功。也许真正的问题是我不了解线程或多处理。

这是一个代码示例,它与我正在使用的代码大致同构,使用 sched 模块,我开始工作:

    import cmd2
import repeated

class prompt(cmd2.Cmd):
"""this lets you enter commands"""

def default(self, line):
return cmd2.Cmd.default(self, line)

def do_exit(self, line):
return True

def do_repeated(self, line):
repeated.func_1()

repeated.py 看起来像这样:

    import sched
import time

def func_2(sc):
print 'doing stuff'
sc.enter(10, 0, func_2, (sc,))


def func_1():
s = sched.scheduler(time.time, time.sleep)
s.enter(0, 0, func_2, (s,))
s.run()

最佳答案

http://docs.python.org/2/library/queue.html?highlight=queue#Queue

你能在 cmd2 之外实例化一个 Queue 对象吗?可以有一个线程监视队列并定期从队列中获取作业;而 cmd2 可以自由运行或不运行。当然,处理队列的线程和队列对象本身需要在外部范围内。

要在特定时间安排某事,您可以插入一个包含目标时间的元组。或者,如果足够好,您可以让线程定期检查。

[编辑,如果你有一个打算重复的过程,你可以让它在操作结束时重新排队。]

关于python - 如何在不退出现有循环的情况下安排任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21636698/

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