一、创建进程的两种方式
创建进程的两种方式
代码开启进程和线程的方式,书写语法基本一致
1、使用multiprocessing模块
from multiprocessing import Process
import time
def task(name):
print('{} is running'.format(name))
time.sleep(3)
print('{} is over'.format(name))
if __name__ == '__main__':
'''
Process(target = 函数名, args = (实参1,...))
target=函数名:填入需要创建进程的函数名,只针对该函数进行进程创建
args=元组:表示需要传入函数的参数,必须以元组的数据类型,元组的第一个元素即函数的第一个形参,以此类推
'''
#1.创建一个进程对象
p = Process(target=task, args=('jason',))
#容器类型,无论里面有几个元素,都要使用逗号隔开,哪怕是一个元素,都要在该元素末尾加上逗号
#2.创建进程
p.start() #告诉操作系统帮你创建一个进程,异步
time.sleep(3)
print('主')
'''
注意:
在windows中,创建进程的代码必须放在以下代码中
if __name__ == '__main__':
因为对于,windows来说,他在父进程中创建一个进程,是将该父进程的所有代码都拷贝到新进程中,如果不把创建进程的代码放在上述代码中,那么windows就会一直执行创建进程的代码,从而实现无下限创建下去
在linux中则无上述问题,但是我们也应该养成将创建进程的代码放入到上述语句中执行
'''
2、使用类的继承来实现
# 类的进程
from multiprocessing import Process
import time
class MyProcess(Process):
'''
如果是自己定义类来实现创建进程,那么需要继承Process类,并对该类中的run方法进行重写
'''
def run(self):
print('hello bf girl')
time.sleep(3)
print('get out!')
if __name__ == '__main__':
p = MyProcess()
p.start()
time.sleep(3)
print('主')
1.3 总结
'''
1. 创建进程就是在内存中申请一块内存空间将需要运行的代码丢进去
2. 一个进程对于在内存中就是一块独立的内存空间
3. 多个进程对应在内存中就是多块独立的内存空间
4. 进程与进程之间数据默认情况下是无法直接交互,如果需要交互可以借助第三方工具、模块
'''
windows创建进程注意
'''
在Windows操作系统中由于没有fork(linux操作系统中创建进程的机制),在创建子进程的时候会自动 import 启动它的这个文件,而在 import 的时候又执行了整个文件。因此如果将process()直接写在文件中就会无限递归创建子进程报错。所以必须把创建子进程的部分使用if __name__ ==‘__main__’ 判断保护起来,import 的时候 ,就不会递归运行了。

浙公网安备 33010602011771号