fork() Unix/Linux操作系统提供了fork()系统调用
普通函数调用一次返回一次
fork 调用一次返回两次——因为操作系统把当前进程(父进程)复制了一份(子进程),然后分别在父子进程内返回,但是子进程永远返回0,父进程返回子进程id。因为父进程可以fork出很多子进程,要记住子进程id。而子进程可以通过getppid调用父进程id
getpid()得到当前进程id
getppid()得到父进程id
Apache服务器就是由父进程监听端口,当有新的http请求时,fouk出子进程来处理。
multiprocessing模块:
是跨平台版本的多线程模块,其中提供了一个Process类来代表一个进程对象。
p=Process(target = 函数名,args = (‘参数’,))
进程池:
在multiprocessing模块导入Pool。
p = Pool(xx) 执行的进程数 默认是CPU核数
在进程池中异步添加进程:
p.apply_async(函数名,(参数,))
进程间通信:
Queue:
定义写内容的函数:
def write§:
for value in …:
p.put(value)
定义读内容的函数:
def read§:
while True:
p.get()
Pipe:
conn1,conn2 = Pipe()
其中conn1用于读,conn2用于写:
读: 创建Process对象,target传递读的函数
def read(arg):
recvbuf = arg.recv()
print(recv)
写:
conn2.send([ xxxx ])