python的run方法_python – 内置sched模块的非阻塞scheduler.run()方法的用法?

我想了解如何在方法

scheduler.run(blocking=True)中使用可选参数阻塞.任何实际/现实世界的例子都会非常有用.

根据我迄今为止所做的研究,阻塞可选参数的意图是非阻塞或异步应用程序[1] [2].下面是schduler的主要运行循环(来自python 3.6库sched.py).通过代码,我注意到每当阻塞设置为False时,立即返回目标时间和当前时间之间的时间差,除非目标时间已经过去,在这种情况下将执行操作.

while True:

with lock:

if not q:

break

time, priority, action, argument, kwargs = q[0]

now = timefunc()

if time > now:

delay = True

else:

delay = False

pop(q)

if delay:

if not blocking:

return time - now

delayfunc(time - now)

else:

action(*argument, **kwargs)

delayfunc(0) # Let other threads run

在我看来,非阻塞设计要求我继续运行调度程序,直到队列清理为止.因此,我正在考虑自己维护一个任务队列,并继续将scheduler.run任务推入队列(如下面的代码.)这是一个理想的设计吗?使用非阻塞调度程序的正确方法是什么?

def action():

print('action at: ', datetime.now())

if __name__ == '__main__':

s = sched.scheduler(time.time)

target_time = datetime.now() + timedelta(seconds=5)

s.enterabs(target_time.timestamp(), 1, action)

run = functools.partial(s.run, blocking=False)

taskq = deque()

taskq.append(run)

while taskq:

task = taskq.popleft()

result = task()

print(result)

if result:

taskq.append(run)

time.sleep(1)

print('end tasks')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值