python下的多进程与多线程
python多进程
关于多进程与多线程的概念第一个接触是在学习C语言的时候,当时借助stevens的《UNIX环境高级编程》了解了关于进程和线程的相关知识,为现在接触python的同类概念打下了基础。有兴趣的同学也可以阅读这本书。
当我们需要并行的执行多个任务的时候,在python语言中有两种方式:进程分支和线程派生。
在这节中我们将会介绍进程分支的技术,分支的进程是构建平行任务的传统做法,分支的想法基于程序的复制:在最初的阶段,当程序调用分支去开启另外一个程序的时候,操作系统会创建该程序及其在内存中的副本。但是在随后的使用过程中发现,新开启的程序往往执行的任务与原程序没有任何关系,所以操作系统提出了写时复制这样的机制(即只有在原程序的资源被使用的时候才进行拷贝),极大的提高了内存和时间的效率。
在进行了分支操作后,原来的程序副本叫做父进程,而由os.fork创建的副本称为子进程。
下面给出一个多进程的示例:
#!/usr/bin/env python
#-*-coding:utf-8-*-
import os
def create_child():
print ('hello from child', os.getpid())
os._exit(0)
if __name__ == '__main__':
while True:
new_pid = os.fork()
if new_pid == 0:
create_child()
else:
print ('hello from parent', os.getpid(), new_pid)
if raw_input() == 'q':
break
注意:
1.使用os.fork()可以产生分支进程,返回值有两个,如果new_pid为0,则该区域的操作是属于子进程的,如果大于0则是属于父进程的操作。
这个os.fork只是对系统代码库的简单封装。
在上述示例中,每个进程运行后很快结束,因此在时间的重叠很少,接下来的示例中我们让进程进行一定时间上的sleep;
#!/usr/bin/env python
#-*-coding:utf-8-*-
import os
import time
def thild_count(count):