python异步和多线程_Python性能篇之多进程与多线程的瓶颈,异步IO的到来

这篇博客介绍了如何使用Python的生成器(generator)和协程实现生产者消费者模型。通过`yield`和`send()`函数,生产者可以将数据传递给消费者,并接收其反馈。示例代码展示了如何创建并运行生产者和消费者,实现了数据的循环生产和消费。这种方法允许在单线程中高效地处理并发任务,而无需低级的线程同步操作。
摘要由CSDN通过智能技术生成

Python其实是通过generator来实现的,也就是生成器。

我们都知道,在generator中,我们可以通过for in 来循环迭代,也可以通过不断调用next()来拿到yield返回的值。其实,yield还有一个特性,它可以接收generator.send()发送出来的数据哦。

试想,我们把要执行IO操作的代码封装成generator,然后放入一个消息循环中执行,当执行完后,我们再执行send操作,是不是我们就可以再yield处接收执行的结果了呢?

我们通过协程来实现一个生产者消费者模型

示例代码如下:

def consumer(name):

r='';

while True:

n = yield r

if not n:

return

print('[Consumer:%s],I am consuming %s...' % (name,n))

r = '200 OK'

def produce(name,c):

c.send(None)

n = 0

while n < 5:

n = n + 1

print('[Produce:%s], I to producing %s...' % (name,n))

r = c.send(n)

print('[Produce:%s], Consumer return: %s' % (name,r))

c.close()

c = consumer('c1')

produce('p1',c)

结果输入为:

[Produce:p1], I to producing 1...

[Consumer:c1],I am consuming 1...

[Produce:p1], Consumer return: 200 OK

[Produce:p1], I to producing 2...

[Consumer:c1],I am consuming 2...

[Produce:p1], Consumer return: 200 OK

[Produce:p1], I to producing 3...

[Consumer:c1],I am consuming 3...

[Produce:p1], Consumer return: 200 OK

[Produce:p1], I to producing 4...

[Consumer:c1],I am consuming 4...

[Produce:p1], Consumer return: 200 OK

[Produce:p1], I to producing 5...

[Consumer:c1],I am consuming 5...

[Produce:p1], Consumer return: 200 OK

可以看到,生产者生产一个,然后通过send通知消费者进行消费。

代码分析:当我们执行c.send(None)的时候,触发生成器,此时r=‘’,当我们下一发送send时,执行yield后面的语句,然后发送下一次的r的值。

如此我们就只在一个线程中通过generator来实现了生产者消费者模型。

实际开发中如此写代码对于开发者来说是比较底层的,所以,python自然会给我们提供了编写协程代码的利器,我们将在后面章节中进行介绍。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值