欢迎访问宙启技术站
智能推送

send()函数在python中实现协程间通信的方法

发布时间:2023-12-16 10:01:03

在Python中,协程是一种轻量级的线程,可以在程序中实现并发执行。协程中的一个重要概念就是通信,通过通信可以在不同的协程之间传递消息,实现协同工作。在Python中,可以使用send()函数来实现协程间的通信。

send()函数是一个生成器对象的方法,用于向生成器发送数据。它的使用方式是在生成器对象上调用send(value),其中value是要发送的值。调用send()函数会使生成器从yield语句处继续执行,yield表达式的值会被send()函数返回。这样就可以实现协程间的通信。

下面是一个使用send()函数实现协程间通信的例子:

def coroutine():
    while True:
        value = yield  # 接收发送的值
        print(f'Received: {value}')


def main():
    coro = coroutine()  # 创建一个协程对象
    next(coro)  # 启动协程

    coro.send(1)  # 向协程发送数据,协程继续执行
    coro.send('Hello')  # 再次发送数据,协程再次执行
    coro.send(3.14)  # 继续发送数据

    coro.close()  # 关闭协程对象


if __name__ == '__main__':
    main()

在上面的例子中,coroutine()函数是一个生成器函数,定义了一个无限循环。在循环中,使用yield语句接收来自send()函数的值,并打印出来。

main()函数中,首先创建了一个协程对象coro,然后通过next(coro)启动协程。接着,通过coro.send()方法向协程发送数据,并打印出接收到的值。

最后,通过coro.close()方法关闭协程对象。注意,关闭协程对象后,再次调用coro.send()方法会引发StopIteration异常。

通过以上的例子可见,send()函数在协程中的作用是发送数据并唤醒协程,使其从yield语句处继续执行。通过不断地调用send()函数,可以实现协程间的通信并完成协同工作。