• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > 简单介绍Python中利用生成器实现的并发编程

简单介绍Python中利用生成器实现的并发编程

作者:goldensun 字体:[增加 减小] 来源:互联网

goldensun 通过本文主要向大家介绍了python 生成器,python生成随机数,python生成exe,python 列表生成式,python 生成html等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

我们都知道并发(不是并行)编程目前有四种方式,多进程,多线程,异步,和协程。

多进程编程在python中有类似C的os.fork,当然还有更高层封装的multiprocessing标准库,在之前写过的python高可用程序设计方法中提供了类似nginx中master process和worker process间信号处理的方式,保证了业务进程的退出可以被主进程感知。

多线程编程python中有Thread和threading,在linux下所谓的线程,实际上是LWP轻量级进程,其在内核中具有和进程相同的调度方式,有关LWP,COW(写时拷贝),fork,vfork,clone等的资料较多,这里不再赘述。

异步在linux下主要有三种实现select,poll,epoll,关于异步不是本文的重点。

说协程肯定要说yield,我们先来看一个例子:

#coding=utf-8
import time
import sys
# 生产者
def produce(l):
  i=0
  while 1:
    if i < 5:
      l.append(i)
      yield i
      i=i+1
      time.sleep(1)
    else:
      return
   
# 消费者
def consume(l):
  p = produce(l)
  while 1:
    try:
      p.next()
      while len(l) > 0:
        print l.pop()
    except StopIteration:
      sys.exit(0)
l = []
consume(l)
</div>

在上面的例子中,当程序执行到produce的yield i时,返回了一个generator,当我们在custom中调用p.next(),程序又返回到produce的yield i继续执行,这样l中又append了元素,然后我们print l.pop(),直到p.next()引发了StopIteration异常。

通过上面的例子我们看到协程的调度对于内核来说是不可见的,协程间是协同调度的,这使得并发量在上万的时候,协程的性能是远高于线程的。

import stackless
import urllib2
def output():
  while 1:
    url=chan.receive()
    print url
    f=urllib2.urlopen(url)
    #print f.read()
    print stackless.getcurrent()
   
def input():
  f=open('url.txt')
  l=f.readlines()
  for i in l:
    chan.send(i)
chan=stackless.channel()
[stackless.tasklet(output)() for i in xrange(10)]
stackless.tasklet(input)()
stackless.run()
</div>

关于协程,可以参考greenlet,stackless,gevent,eventlet等的实现。

</div>

您可能想查找下面的文章:

  • python生成式的send()方法(详解)
  • python生成器表达式和列表解析
  • python生成器表达式和列表解析
  • Python生成不重复随机值的方法
  • 简单介绍Python中利用生成器实现的并发编程
  • 简单使用Python自动生成文章

相关文章

  • Python中用于转换字母为小写的lower()方法使用简介
  • python中urllib模块用法实例详解
  • tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
  • Python随机生成彩票号码的方法
  • python ip正则式
  • python比较2个xml内容的方法
  • Python文件和目录操作详解
  • Python使用PDFMiner解析PDF代码实例
  • python 网络爬虫初级实现代码
  • python抓取网页中的图片示例

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Python程序中设置HTTP代理
    • python实现用户登陆邮件通知的方法
    • 用Python实现命令行闹钟脚本实例
    • NumPy排序的实现
    • python中 ? : 三元表达式的使用介绍
    • Python threading多线程编程实例
    • Python中几种操作字符串的方法的介绍
    • Django卸载之后重新安装的方法
    • Python中的类学习笔记
    • 详解python 发送邮件实例代码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有