创建进程的多种方式
multiprocess模块
multiprocess是python中一个操作、管理进程的包。
Process类介绍
Process(group , target , name , args , kwargs),由该类实例化得到的对象,表示一个子进程中的任务(尚未启动)
强调:
1. 需要使用关键字的方式来指定参数
2. args指定的为传给target函数的位置参数,是一个元组形式,必须有逗号
参数介绍:
1 group参数未使用,值始终为None
2 target表示调用对象,即子进程要执行的任务
3 args表示调用对象的位置参数元组,args=(1,2,‘kkk‘,)
4 kwargs表示调用对象的字典,kwargs={‘name‘:‘kkk‘,‘age‘:18}
5 name为子进程的名称
Process类创建进程的两种方式
#开进程的方法一:
import time
import random
from multiprocessing import Process
def piao(name):
print(‘%s piaoing‘ %name)
time.sleep(random.randrange(1,5))
print(‘%s piao end‘ %name)
if __name__ == ‘__main__‘:
p1=Process(target=piao,args=(‘kkk‘,)) #必须加,号
p2=Process(target=piao,args=(‘ttt‘,))
p3=Process(target=piao,args=(‘aaa‘,))
p4=Process(target=piao,args=(‘bbb‘,))
p1.start()
p2.start()
p3.start()
p4.start()
print(‘主线程‘)
#开进程的方法二:
import time
import random
from multiprocessing import Process
class Piao(Process):
def __init__(self,name):
super().__init__()
self.name=name
def run(self):
print(‘%s piaoing‘ %self.name)
time.sleep(random.randrange(1,5))
print(‘%s piao end‘ %self.name)
if __name__ == ‘__main__‘:
p1=Piao(‘ttt‘)
p2=Piao(‘aaa‘)
p3=Piao(‘bbb‘)
p4=Piao(‘ccc‘)
p1.start() #start会自动调用run
p2.start()
p3.start()
p4.start()
print(‘主线程‘)
进程中的其他知识
进程间数据隔离
进程隔离是为了保护操作系统中进程互不干扰而设计的一组不同硬件和软件的技术。
这个技术是为了避免进程A写入进程B的情况发生。进程的隔离实现,使用了虚拟地址空间,进程A的虚拟地址和进程B的虚拟地址不同,这样就防止进程A将数据信息写入进程B。
# 代码验证
from multiprocessing import Process
n = 66
def work():
global n
n = 100
print(‘子进程:‘, n)
if __name__ == ‘__main__‘:
p = Process(target=work)
p.start()
print(‘主进程:‘, n)
# 主进程: 66
# 子进程: 100
守护进程
? 会随着主进程的结束而结束
- 主进程创建守护进程
import os
import time
from multiprocessing import Process
class MyProcess(Process):
def __init__(self, person):
super().__init__()
self.person = person
def run(self):
print(os.getpid(), self.name)
print(‘%s正在编写代码。‘%self.person)
if __name__ == ‘__main__‘:
p = MyProcess(‘zkim‘)
# 一定要在p.start()前设置,设置p为守护进程,禁止p创建子进程,并且父进程代码执行结束,p即终止运行
p.daemon = True
p.start()
# 在sleep时查看进程id对应的进程ps -ef|grep id
time.sleep(5)
print(‘主‘)