一 源码剖析
# Process 部分源码class Process(process.BaseProcess):_start_method = None@staticmethoddef _Popen(process_obj):return _default_context.get_context().Process._Popen(process_obj)
# process.BaseProcess 部分源码class BaseProcess(object):def __init__(self, group=None, target=None, name=None, args=(), kwargs={},*, daemon=None):
从源码可以看出,传参可以是元组args=(),也可以是字典kwargs={}
参数介绍:
group参数未使用,值始终为Nonetarget表示调用对象,即子进程要执行的任务args表示调用对象的位置参数元组,args=(1,2,'egon',)kwargs表示调用对象的字典,kwargs={'name':'egon','age':18}name为子进程的名称
二 开启子进程的两种方式
创建对象方式
# 方式一:对象方式from multiprocessing import Processimport timedef task(name):print('%s is running' % name)time.sleep(3)print('%s is done' % name)if __name__ == '__main__':# Process(target=task,kwargs={'name':'子进程1'})p = Process(target=task, args=('子进程1',))p.start() # 仅仅只是给操作系统发送了一个信号print('主')
类继承方式
# 方式二from multiprocessing import Processimport timeclass MyProcess(Process):def __init__(self, name):super().__init__()self.name = namedef run(self):print('%s is running' % self.name)time.sleep(3)print('%s is done' % self.name)if __name__ == '__main__':p = MyProcess('子进程1')p.start() # 自动调用run()print('主')
三 总结
程序默认有一个主进程,通过multiprocessing模块创建了一个子进程后,此时进程总数为2
