python 是一种非常流行的编程语言,但是python 的效率却并不是非常的理想,这时候就非常有必要使用多进程来提高python 的运行效率。
导入多进程的模块
from multiprocessing import Process # 多进程模块
from multiprocessing import current_process # 获取当前进程号
import time
创建多个进程
方式一:
# 定义一个多进程运行的函数
def fun(n):
time.sleep(3) # 设置一个延时观察多进程的运行情况
print("{}".format(n))
print("当前进程号:",current_process().pid) # 打印当前的进程号
if __name__ = "__main__":
p = Process(target=fun,args=(3,)) # 输入的参数设置,如果只是一个参数时候必须加上逗号,不然会被解析为一个字符串或者数字
p.start() # 创建一个进程的内存空间
p.join() # 阻塞进程,等待子进程运行完成之后,再继续运行朱金城代码
print("主进程运行结束,进程号{}".format(current_process().pid)) # 查看主进程号
方式二:
创建多个进程
class myProcess(Process): # 继承多进程的模块
def run(self): # 替换多进程类中的run 函数
print("start myProcess")
time.sleep(2)
print("end myProcess")
if __name__ = "__main__":
p = myProcess() # 创建一个子进程
p.start()
p.join() # 阻塞子进程等待子进程运行结束
print("主进程运行结束")
ps: 查看当前进程号的另一种方法
import os
os.getpid(); # 当前进程的进程号
os.getppid(); # 当前进程的父进程的进程号
进程之间数据一般不能相互交互,需要相互交互时候,需要使用到第三方介质或者导入其他第三方库进行获取。
总结:
1.多个进程在内存中分别拥有着不同的区域,进程之间互不影响,同时也导致是数据不能共享。
2.多个进程分配到内存之后,几乎同时运行,不需要等待前面的结束才进行后面的进程,异步执行代码。
3、多进程由于同时运行,导致在读取数据以及修改数据时候会出现问题,添加互斥锁,使得一个时间点内只能有一个进程在修改数据,不会导致数据出现逻辑上的错误(将并发数据转变成为串行,牺牲效率,但是保证数据的安全)
from multiprocessing import Process, Lock
import json
def change(i):
with open("data.json","w") as f:
json.dump(f,) # 修改逻辑数据
def run(i,mutex):
mutex.acquire() # 抢锁
change(i)
mutex.release() # 释放锁
mutex = Lock() # 新建一把互斥锁
for i in range(1,10):
p = Process(target=run,args=(i,mutex))
p.start()
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115139.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...