Python理解调度程序
我有一个Python理解调度程序,python,scheduled-tasks,scheduler,Python,Scheduled Tasks,Scheduler,我有一个python调度程序code来打印Hello和World import sched import time def x(): print "Hello" s = sched.scheduler(time.time, time.sleep) s.enter(10, 1, x, ()) s.run() print "World!" 等待10秒并输出: Hello World! 我认为调度器的工作是在不中断当前进程的情况下安排任务。但在这里,它使整个程序处于休眠状态,其行为与以
python调度程序
code来打印Hello
和World代码>
import sched
import time
def x():
print "Hello"
s = sched.scheduler(time.time, time.sleep)
s.enter(10, 1, x, ())
s.run()
print "World!"
等待10秒
并输出:
Hello
World!
我认为调度器的工作是在不中断当前进程的情况下安排任务。但在这里,它使整个程序处于休眠状态,其行为与以下代码类似:
import time
def x():
print "Hello"
time.sleep(10)
x()
print "World!"
我猜调度程序使程序休眠是因为sched.scheduler(time.time,time.sleep)
中的time.sleep
参数。
我们是否可以让它像实时调度器一样工作,而不阻塞主进程,而不使用任何多线程
或多处理
?来自:
在多线程环境中,调度程序
类在线程安全方面有限制,无法在正在运行的调度程序中当前挂起的任务之前插入新任务,并且在事件队列为空之前一直挂起主线程。相反,首选的方法是使用threading.Timer
类
不阻塞主进程而不使用任何多线程
或多处理
一个线程不能同时做两件事,所以<“代码>线程化”
是为了避免阻塞而需要使用的绝对最小值。调度程序的任务不仅仅是在每个特定时间段后执行后续任务。它的工作也是锁定对象,直到它完成任务
from threading import Timer
def xy():
print("End")
Timer(4, xy, ()).start()
print ("Start")
最初,将打印开始,然后4秒后打印结束
如果我们有一个无止境的循环呢
from threading import Timer
def xy():
print("End")
Timer(4, xy, ()).start()
print("Start")
i = 0
while i < 10:
print(i)
来自线程导入计时器
def xy():
打印(“结束”)
计时器(4,xy,()).start()
打印(“开始”)
i=0
当我<10时:
印刷品(一)
它将持续运行。因此,它将保持线程直到上一个线程完成其任务。谢谢。我从未想过,如果没有
sched
库或使用cron作业
,我们就可以使用scheduler
。如果您想在进程执行时间之外安排一些事情,那么cron
仍然是唯一可行的。上面的解决方案,以及任何其他非cron解决方案,都需要在进程等待触发作业时执行它。现在我将使用线程化.Timer
。如果需要,我将切换到cron
<代码>附表对我没有任何用处:P您能帮我取消中间的计时器或重置它吗?t=Timer(10,x,());t、 start();t、 取消();我想你可能做了t=Timer(10,x,()).start()
,它是None
,然后试图取消它。
from threading import Timer
def xy():
print("End")
Timer(4, xy, ()).start()
print ("Start")