python 多进程 提高运行效率

python 多进程 提高运行效率

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()
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115139.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • maven配置本地仓库位置_在setting中配置自己的仓库

    maven配置本地仓库位置_在setting中配置自己的仓库在MAVE_HOME/conf/settings.xml文件中配置本地仓库位置:eclipse与maven配置指定maven安装目录UserSetting配置在eclipse中配置使用的maven的setting.xml文件,使用maven安装目录下的setting.xml文件。注意:如果修改了setting.xml文件需要点击上图中的“updatesettings”按钮

    2022年9月24日
    2
  • 食品生物技术学计算机吗,食品生物技术「建议收藏」

    食品生物技术学计算机吗,食品生物技术「建议收藏」三、教学任务食品生物技术系主要承担本科生的课程如下:生物化学、微生物学、食品营养与卫生学、食品生物技术、实验设计与数据处理、综合性实验课等课程。承担生物化工和食品科学专业研究生高等生物化学、高等微生物学、实验动物学、现代生物技术等课程。四、主要研究方向与内容  食品生物技术系主要从事与食品生物技术方向的教学、科研及甜菜分子生物学方向的科研、研究生培养工作。1.食品分子营养与安全1.1食品分子营养学…

    2022年7月11日
    16
  • 十分钟免费拥有永久网站

    十分钟免费拥有永久网站在人人都会上网的信息时代,拥有属于自己的网站,已经不是什么稀奇的事情了。GithubPages就可以满足我们的需求了。它是github公司提供的免费的静态网站托管服务,用起来方便而且功能强大,不仅没有空间限制,还可以绑定自己的域名。一、注册github账户注册流程和其它平台一样。注册地址:https://github.com/join?source=logingithu…

    2022年5月27日
    90
  • strstr(str1,str2)函数使用时注意事项

    strstr(str1,str2)函数使用时注意事项可能有的人还没听过strstr函数,个人认为这个一个很实用的函数,strstr(str1,str2)函数是字符串处理函数之一,位于头文件“string.h”中。对于处理字符串的一些问题有很大的帮助。定义:strstr(str1,str2)函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。定义说的有点羞涩难懂。举个例子就…

    2022年6月25日
    35
  • 使用ABP打造SAAS系统(2)——前端框架选择[通俗易懂]

    使用ABP打造SAAS系统(2)——前端框架选择[通俗易懂]一、流行框架比较  作者用过的前端框架不少,曾经还在一个项目中同时使用两套框架控件(年少无知、效率特慢),所以可供选择的前端框架有不少:easyui: 优点:非常成熟的框架,基于iframe可以进行多线程操作 缺点:由于采用iframe,不优化情况下效率是个问题,同时iframe导致对SEO的支持不是很好,自带风格不是很符合现在人的口味,自己定义风格有点浪费时间,顺便提供下本人自…

    2022年9月19日
    3
  • Java截取字符串方法_java通过split截取字符串

    Java截取字符串方法_java通过split截取字符串主要有以下几种方法:1、通过subString()方法来进行字符串截取(最常用)2、通过StringUtils提供的方法3、split()+正则表达式来进行截取先来介绍最常用的一种1、通过subString()方法来进行字符串截取,返回字符串中的子字符串,在java中有两种用法第一种,传递一个参数:publicStringsubstring(intbeginIndex)//该子字符串从指定索引处的字符开始,直到此字符串末尾。第二种,传递两个参数:

    2022年10月6日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号