大锤python日记(协程之使用greenlet完成多任务)

76 阅读1分钟

使用greenlet实现多任务的完整案例,并添加了详细注释:

import greenlet

def task1():
    while True:
        print("Task 1") # 打印任务1的标识符
        gr2.switch() # 切换到任务2

def task2():
    while True:
        print("Task 2") # 打印任务2的标识符
        gr1.switch() # 切换到任务1

# 创建两个 greenlet 对象,分别对应任务1和任务2
gr1 = greenlet.greenlet(task1)
gr2 = greenlet.greenlet(task2)

# 启动任务1
gr1.switch()

在这个案例中,我们定义了两个无限循环的任务task1task2。每个任务都会先输出自己的标识符,然后将控制权转移到另一个任务上。

然后,我们创建了两个greenlet对象gr1gr2,并初始化它们分别对应task1task2。接着,启动gr1代表的task1。此时程序会进入task1的循环中,不断执行任务并切换到task2,然后又切回到task1。整个程序会一直运行下去,直到手动中断。

需要注意的是,这里的任务都是以协程的方式运行的,而不是真正的并发任务。因此,在实际应用中,可能需要更多的逻辑处理和线程控制来实现复杂的多任务处理。