大锤python日记(协程之yield的使用)

95 阅读1分钟

使用yield实现的是生成器,它可以在函数中暂停执行并保留当前状态,然后在需要时恢复执行。这样可以模拟多线程的效果。下面是一个使用yield实现的简单示例:

def task1():
    while True:
        print('Task 1 is running')
        yield

def task2():
    while True:
        print('Task 2 is running')
        yield

t1 = task1()
t2 = task2()

while True:
    next(t1)
    next(t2)

上述代码定义了两个生成器函数task1task2,它们分别不断打印出输出。在主程序中,我们创建了两个生成器对象t1t2,并使用next方法交替执行它们。由于生成器是单线程运行的,因此在每次执行时只有一个生成器能够被执行。这种方式虽然不能真正地并行执行多个任务,但可以让一个进程内的多个任务轮流执行,从而达到类似并发的效果。

需要注意的是,使用yield实现的生成器在执行时会阻塞主线程,因此不适合长时间运行的任务。如果需要执行较耗时的任务,建议使用多线程或协程的方式来实现。