【Python】进程与进程池的属性方法及注意事项

版权声明:欢迎交流,转载请注明出处。 https://blog.csdn.net/u013034226/article/details/82318136

1、进程的概念

      进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

2、Process进程类的语法结构

       Process([group [, target [, name [, args [, kwargs]]]]])

      group:指定进程组,使用None,一般不用设置

      target:执行的函数名

      name:进程名

      args:以元组方式给执行任务传参

      kwargs:以字典方式给执行任务传参

3、进程的创建

      导入进程模块

      import multiprocessing

      创建子进程

      进程名 = multiprocessing.Process(target = 函数名)

4、进程的常用方法和属性

      start():启动子进程

      join:主进程等待当前子进程执行结束后再执行后面的代码

      terminate():立即销毁子进程

      查看当前进程:变量名 = multiprocessing.current_process()

      查看当前进程编号:current_process.pid, os.getpid()

      查看父进程编号:os.getppid

      根据进程编号杀死进程:os.kill(os.getpid(), 9)

5、注意点

       进程间相互独立,不共享全局变量

       默认主进程会等待所有的子进程执行完成程序再退出,设置守护主进程后,子进程会在主进程退出后直接销毁:当前子进程名.daemon = True

       6、进程间通信 Queue

       创建消息队列:队列名 = multiprocessing.Queue(队列中最大消息个数)

       队列可以放入任意数据类型:队列名.put(要放入的数据),取值:get()

       .put():如果队列满了,需要等待队列有空闲位置才能放入数据,否则一直等待, .put_nowait():如果队列满了,不等待,放入不成功直接崩溃,建议使用put

        .get():如果队列空了,要等待队列有值后才能获取队列中的数据,.get_nowait():队列为空不等待,同样会崩溃

       .full():查看队列是否满了,满了返回True,否则返回False; .qsize():查看队列数据个数,不建议使用.empty

        7、进程池

        进程池可以根据任务执行情况自行创建进程,合理利用进程完成多任务。

        创建进程池:进程池名 = multiprossing.Pool(最大进程数),提示:使用进程池创建的进程是守护主进程的状态,默认自己通过Process创建的进程是不是守住主进程的状态

        选择同步或异步执行任务

        同步(一个任务执行完后,另一个任务才执行):进程池名.apply(函数名)

        异步(任务执行不会等待,多个任务一起执行):进程池名.apply_async(函数名)

猜你喜欢

转载自blog.csdn.net/u013034226/article/details/82318136
今日推荐