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")