标签:
一、多线程
二、协程(又称微线程,纤程)
协程,与线程的抢占式调度不同,它是协作式调度。协程在python中可以由generator来实现。
首先要对生成器和yield有一个扎实的理解.
调用一个普通的python函数,一般是从函数的第一行代码开始执行,结束于return语句、异常或者函数执行(也可以认为是隐式地返回了None)。
一旦函数将控制权交还给调用者,就意味着全部结束。而有时可以创建能产生一个序列的函数,来“保存自己的工作”,这就是生成器(使用了yield关键字的函数)。
能够“产生一个序列”是因为函数并没有像通常意义那样返回。return隐含的意思是函数正将执行代码的控制权返回给函数被调用的地方。而"yield"的隐含意思是控制权的转移是临时和自愿的,我们的函数将来还会收回控制权。
详情请看:解释‘yield‘和‘Generators(生成器)‘
三、多进程
1、子进程(subprocess包)
在python中,通过subprocess包,fork一个子进程,并运行外部程序。
调用系统的命令的时候,最先考虑的os模块。用os.system()和os.popen()来进行操作。但是这两个命令过于简单,不能完成一些复杂的操作,如给运行的命令提供输入或者读取命令的输出,判断该命令的运行状态,管理多个命令的并行等等。这时subprocess中的Popen命令就能有效的完成我们需要的操作
>>>import subprocess >>>command_line=raw_input() ping -c 10 www.baidu.com >>>args=shlex.split(command_line) >>>p=subprocess.Popen(args)
利用subprocess.PIPE将多个子进程的输入和输出连接在一起,构成管道(pipe):
import subprocess child1 = subprocess.Popen(["ls","-l"], stdout=subprocess.PIPE) child2 = subprocess.Popen(["wc"], stdin=child1.stdout,stdout=subprocess.PIPE) out = child2.communicate() print(out)
communicate() 方法从stdout和stderr中读出数据,并输入到stdin中。
标签:
原文地址:http://www.cnblogs.com/tyomcat/p/5486827.html