进程相当于任务,线程相当于子任务。
主要可以分为1. 多进程 2. 多线程 3. 多进程+多线程
- 多进程的变量互不影响
- 多线程中,所有变量都由所有线程共享
多进程
fork()
fork()调用一次,返回两次。(父进程自动复制一份给子进程);
- 子进程永远返回0
- 父进程返回子进程的ID
- 子进程通过调用getppid() 拿到父进程的ID
p.s. 先返回父进程,在返回子进程?
【程序】
import os
print('process (%s) start...'% os.getpid())
pid=os.fork()
if pid==0:
print('i am child process %s and my parent is %s'%(os.getpid(),os.getppid())
else:
print('i %s just created a child process %s'(os.getpid(),pid))
os.getpid()
#获得当前进程的进程号os.getppid
#获得当前进程的父进程的进城号- 结果如下
process (876) start... i 876 just created a child process 877 i am child process 877 and my parent is 876
multiprocessing
【程序】
from multiprocessing import Process
import os
def run_proc(name):
print('run child process %s %s'%(name, os.getpid()))
if __name__=='__main__':
print('parent process %s' %os.getpid())
p=process(target=run_proc, args=('test',))
print('child process will start')
p.start()
p.join()
print('child process end')
if __name__=='__main__':
#一个python的文件有两种使用的方法,第一是直接作为脚本执行,第二是import到其他的python脚本中被调用(模块重用)执行。第一种情况该if 语句执行,第二种情况不执行p=process(target=run_proc, args=('test',))
#创建子进程时,只需要传入一个执行函数和函数的参数p.start()
#启动process实例p.join()
#用于进程间的同步
pool
如果要启动大量的子进程,可以用进程池的方式批量创建子进程
略
子进程
略