一、multiprocessing模块

python中的多线程无法利用多核优势,如果想要充分地使用多核cpu的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程。python提供了multiprocessing

multiprocessing 模块用来开启子进程。并在子进程中执行我们定制的任务(例如函数)。与多线程threading类似

 

multiprocessing 模块支持很多功能 :子进程、通信、共享数据,执行不同的同步,提供Process、Queue、Pipe、Lock 等组件

ps:与线程不同,进程没有任何共享状态,修改的数据(改动等等)仅限于该进程内。

 二、Process类介绍

 创建进程的类

Procss([group [, target [,name [, args [, kwargs ] ] ] ] ] ) ,由该类实例化得到对象,表示一个子进程中的人物(尚未启动)

ps:1. 需要指定关键字的方式来制定参数

  2. args 指定为传给 target 函数位置,是一个元组形式,必须有逗号

参数介绍

1. group 参数 未使用 ,值始终为 None

2. target 表示 调用对象 , 即子进程要执行的任务(不加括号)

3. args 表示调用对象的位置参数元组,args = (x , y ,)

4. kwargs 表示调用对象的字典,kwargs={'x':1 , 'y':99}

5. name 为子进程的名称

方法介绍

1. p.start() :启动进程,并调用该子进程的 p.run()

2. p.run() :进程启动时运行的方法 ,它去调用target指定的函数,自定义的类一定要实现该方法。

3. p.terminate() :强制终止进程p ,不会进行任何清理操作,如果p创建了子进程,该子进程就变成僵尸进程了,使用该方法需要小心这个情况,如果p还保存了一个锁 那么也将不会被释放,进而导致死锁

4. p.is_alive() : 如果p仍然运行,返回True 

5. p.join([timeout]) :主进程等待p终止 (ps:是主线程处于等 的状态,而p是处于运行的状态),timeout是可选的超时时间,需要强调的是,p.join 只能join 住 start 开启的进程,而不能join住 run开启的进程

属性介绍

1. p.daemon : 默认为False , 如果设为True ,代表p为后台运行的守护进程,当p的父进程终止时,p也随之终止,并且设置完后,p不能创建自己的新进程,必须在p.start() 之前设置。

2. p.name :进程的名称

3. p.pid :进程的pid

4. p.exitcode :进程运行时为None、如果为-N ,表示被信号N结束(了解)

5. p.authkey :进程的身份验证键,默认是由 os.urandom()随机生成的32位字符串,这个键的用途是为涉及网络连接的底层进程间通信提供安全性,这类连接只有在具有相同身份验证键时才算成功(了解)

 

三、Process类的使用

在windows中Process()必须放到# if __name__ == '__main__':下

创建并开启子进程的两种方式

# 开启子进程的方式1:

from multiprocessing import Process
import time

def task(name):
    print('%s is running' %name)
    time.sleep(3)
    print('%s is done' %name)

# 在windows系统上开启子进程的操作必须放到该行代码下
if __name__ == '__main__':
    p=Process(target=task,args=('子进程',)) # Process(target=task,kwargs={'name':'子进程'}) #
    p.start() # 仅仅只是向操作系统发送一个创造子进程的信号
    print('')
方式一

相关文章:

  • 2022-12-23
  • 2022-03-08
  • 2022-12-23
  • 2021-07-07
  • 2021-05-21
  • 2021-08-26
  • 2021-10-10
  • 2022-12-23
猜你喜欢
  • 2021-06-13
  • 2022-12-23
  • 2022-02-19
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案