创建进程的方式

创建进程的多种方式

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('主')
posted @ 2020-05-22 11:00  光吃葡萄皮  阅读(313)  评论(0编辑  收藏  举报
回顶部