一、创建进程的两种方式

创建进程的两种方式

代码开启进程和线程的方式,书写语法基本一致

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 的时候  ,就不会递归运行了。
posted @ 2021-06-03 14:06  zzwYYYYYY  阅读(712)  评论(0)    收藏  举报