**进程总结*
关于进程有以下3种创建方式
一.os.fork()
首先os模块下的fork函数在Windows系统下无法使用
具体创建进程函数如下:
ret = os.fork()#用ret变量进行接收
if ret == 0:
print(“判定为子进程 --%d—%d”%(os.getpid(),os.getppid()))
#其中子进程中所获取的os.getppid()为父进程的pid
else:
print(“这是父进程–%d”%os.getpid())
#这里应该注意:
1.如果主进程先结束 它不会等待子进程结束
2.在全局变量的问题上 所有的子进程不会共享(也就是说在一个子进程对全局变量进行修改 不会影响其它进程中的全局变量)
二.用Process创建进程
eg:
def ×××():
在这个函数中定义进程需要执行的代码
p1 = Process(target = ×××)#target所指向的函数就是进程所要执行的
p1.start()#子进程开始执行×××里面的函数,主进程继续向下执行
p1.join(x)#堵塞 join的作用就是等待 x表示等待的最长时间 如果在这个时间段内进程未执行完 主进程继续向下执行;不添加x的值 那么就会等待进程结束再向下执行
这个需要注意的是 主进程会等待子进程执行完毕
三.创建进程池
from multiprocessing import Pool
def work():
for i in range(5):
print(“pid = %d”%i)
time.sleep(1)
#4表示进程池中最多有4个进程一起执行
pl = Pool(4)
for i in range(10):
print("—%d—"%i)
pl.apply_async(work)
#向进程中添加任务 如果添加的任务超过了进程池中进程的个数 那么不会添加不进去 它会等待前面的任务执行完毕后 再去刚才的进程继续完成新的任务
#关闭进程池 相当于不能向里面添加新的任务了
pl.close()
pl.join()
#当主进程 创建、添加任务后 主进程默认立马结束 而不是等待子进程 如果不添加join() 导致进程池中的任务不会执行