使用python的yield实现任务调度.给定一个任务列表,每个任务轮流切换执行,类似于切片

本文介绍了一个简单的协程调度器实现,通过Python的生成器来模拟并发执行多个计数任务的过程。该调度器能够轮询执行计数向下和向上任务,展示了基本的调度逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

任务:

给定一个数N, 每次对这个数减1

给定一个数N, 每次对这个数加的次数统计

任务列表就是上面多个任务, 要求每个任务轮流执行(调度):


#!/bin/python3.5
#coding=utf8

'''
sched task yield
'''

def count_donw(n):
	while n > 0:
		print("count donw", n)
		yield
		n -= 1

def count_up(n):
	x = 0
	while x < n:
		print ("up times:", x)
		yield
		x += 1

from collections import deque


class SchedTask():

	def __init__(self):
		self.dq = deque()

	def add_task(self, task):
		self.dq.append(task)

	def run(self):
		while True:
			task = self.dq.popleft()
			try:
				next(task)
				self.dq.append(task)
			except StopIteration:
				pass

if __name__ == "__main__":
	sched = SchedTask()
	sched.add_task(count_donw(6))
	sched.add_task(count_donw(3))
	sched.add_task(count_up(10))
	sched.run()

打印结果:

count donw 6
count donw 3
up times: 0      
count donw 5
count donw 2
up times: 1
count donw 4
count donw 1
up times: 2
count donw 3
up times: 3
count donw 2
up times: 4
count donw 1
up times: 5
up times: 6
up times: 7
up times: 8
up times: 9

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值