顾名思义,进程就是程序正在执行的一个过程.进程的概念最先是来源于操做系统,是操做系统最核心的概念,因此要真正了解进程,必须事先了解操做系统.html
http://www.javashuo.com/article/p-cpsqrfkp-c.htmlnode
简单来讲,由于早期的计算机只有一个cpu,也能支持并发(伪并行)的能力.或者是将一个单独的cpu变成多个虚拟的cpu(也就是多道技术:时间多路复用和空间多多路复用+硬件上支持隔离).python
官方的话来讲,进程(Process)就是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,也是操做系统结构的基础.linux
狭义来讲,进程是正在运行的程序的实例web
广义来讲,进程是一个具备必定独立功能的程序关于某个数据集合的一次运行活动.是操做系统动态执行的基本单元,在传统的操做系统中,进程便是基本的分配单元,又是基本的执行单元.shell
同一个程序执行两次,就会在操做系统中出现两个进程,这两个进程是互不干扰的,相互独立的,因此咱们能够同时运行一个软件,分别作不一样的事情,也不会混乱.编程
并发:并发是指资源有限的状况下,二者或者更多的使用者轮流使用资源,并发是一种伪并行,实际上并发同一时间仍是只能被一个使用者使用,只是能够交替使用,从而提升效率windows
并行:并行是指二者同时执行,是真正的同时执行,不是并发那样看似像是同时进行,并行的最基础的条件就是多核,或者说是多个大脑,资源够用的状况下,才能够并行.服务器
其区别:session
并行是从微观上,也就是在一个精确的时间片刻,有不一样的程序在执行,就必须有多个处理器,来实现并行.
并发是从宏观上看的,在一个时间段内能够看作是同时执行,好比一个服务器要同时处理多个session,其实是并发,而不是并行.
实际上,新进程的建立都是由一个已经存在的进程执行了一个用于建立进程的系统调用而建立的.
其实究其根原本说,multiprocess不是一个模块,而是python中一个操做,管理进程的包.其中的multi就是取自mulitiple的多功能的意思.
Process模块时一个建立进程的模块,借助这个模块咱们就能够完成进程的建立.
点开Process的源码,咱们能够看到如下内容
xxxxxxxxxx
class Process(object):
def __init__(self, group=None, target=None, name=None, args=(), kwargs={}):
self.name = ''
self.daemon = False
self.authkey = None
self.exitcode = None
self.ident = 0
self.pid = 0
self.sentinel = None
def run(self):
pass
def start(self):
pass
def terminate(self):
pass
def join(self, timeout=None):
pass
def is_alive(self):
return False
'''
其中的参数含义为:
1. group,默认为None,不用赋值
2. target为调用对象,能够是函数,或者类
3. args表示调用对象的位置参数元组,注意,必须是元组
4. kwargs为调用对象的字典,注意,必须是字典
5. name为子进程的名称,这个能够任意定义
属性的含义为:
1. p.daemon(),默认值为False,若是设置成True就表明p是后台运行的守护进程,p的父进程终止的时候p也要随之终止,且p不能建立本身的新进程
2. p.name(),就是子进程的名字
3. p.pid(),子进程的pid
4. p.exitcode(),没有大用,没必要理会
5. p.authkey(),暂时不用了解
其中的一些方法的含义为:
1. p.run(),进程启动时会自动运行的方法,没必要手动去调用,因此咱们能够在这个方法里写入想要实现或者赋值的一些语句
2. p.start(),启动进程,并自动调用子进程中的run(),须要手动调用
3. p.terminate(),强制终止进程,但不会进行清理操做,容易产生僵尸进程,要谨慎使用
4. p.join(),主线程等待p终止,注意,是主线程在等,p子进程仍是在运行的状态,括号里是能够写等待超时的时间,可是join只能等待用start开启的进程,用run开启的不能用
5. p.is_alive(),判断子进程p是否还在运行,若是在运行返回True,若是没有运行返回False
'''
很显然这是一个类,因此咱们能够经过对这个类实例化来产生对象.
须要注意的几点是:
Process(target = func,name = nick,args = (,))