Python 多进程基本语法

时间:2023-03-08 18:50:36
需求:
   在有多线程的情况下,我们可以使用线程帮我们处理一些事情,但是在python这里 由于RSA锁的缘故,我们只能够用到一个cpu帮我们处理事情,一个cpu在处理多个线程时,是通过上下文的切换使我们产生幻觉,感觉他同时在处理多个线程,但是在这里cpu在进行上下问的切换也是要消耗cpu。cpu是处理计算的 如1+1的计算。io操作不占用cpu,io只做网络,磁盘,内存中读取数据。所以python多线程 不适合CPU密集操作行的任务,python更适合io密集型的任务。
方案:
  这里可以使用进程,采取多进程的方式,可以使用到,多核的其他CPU,但是由于进程的原因,是不能共享数据的。
参数:
  multiprocessing.Process(target=函数, args=('参数',)) #生成一个进程
  注:Linux 每一个进程都是由父进程启动的。
  注:每一个进程默认都有一个父进程。
多进程模板:
import multiprocessing
import time
def f(name):
time.sleep(2)
print('hello', name) if __name__ == '__main__': # 生成一个进程实例
p = multiprocessing.Process(target=f, args=('bob',)) # 启动一个进程
p.start() # 等待一个进程完成
p.join()
多进程查看,主进程与子进程PID:
from multiprocessing import Process
import os def info(title):
print(title) # 打印模块名
print('module name:', __name__) # 打印父进程ID
print('parent process:', os.getppid()) # 打印自己的ID
print('process id:', os.getpid())
print("\n\n") def f(name): # 子进程调用info
info('\033[31;1mfunction f\033[0m')
print('hello', name) if __name__ == '__main__': # 主进程调用info
info('\033[32;1mmain process line\033[0m')
p = Process(target=f, args=('bob',))
p.start()
p.join()