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)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 写给 python 程序员的 OpenGL 教程

    OpenGL是OpenGraphicsLibrary的简写,意为“开放式图形库”,是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。OpenGL不是一个独立的平台,因此,它需要借助于一种编程语言才能被使用。C/C++/python/java都可以很好支持OpengGL,我当然习惯性选择python语言。如果读者是python程序员,并且了解numpy,接下来的阅读应该不会有任何障碍;否则,我建议先花半小时学习一下python语言。

    2022年4月5日
  • Remobjects使用经验

    Remobjects使用经验RemObjectsRemObjects提示:我们相信本文是正确的,但我们不做任何保证.在此感谢Henrick写的文章,很高兴在此发表.介绍RemObjects是功能强大可扩展的远程框架;但是当考虑

    2022年7月1日
  • JDK1.8关于运行时常量池, 字符串常量池的要点[通俗易懂]

    JDK1.8关于运行时常量池, 字符串常量池的要点[通俗易懂]网上关于jdk1.8的各种实验,结论鱼龙混杂,很多都相矛盾,网上有的实验也被后人测试出了不同的结果很多都分辨不了真假,这里记录一下网络上正确的结论,欢迎指正!首先自行区分运行时常量池与Class文件常量池(静态常量池)的概念,JVM内存模型,方法区与永久代的区别,有些在我的其他博客有介绍,连接在文尾在JDK1.7之前运行时常量池逻辑包含字符串常量池存放在…

    2022年7月28日
  • 网页视频下载(TS流下载合成)

    网页视频下载(TS流下载合成)前言最近《流浪地球》比较火,想找资源下载看看,无奈只找到了网址http://m.tlyy.tv/,但是我的chrome插件也嗅探不到网页上的视频。。于是乎,右击页面,inspect走起…步骤首先发现m3u8文件映入眼帘/偷笑,m3u8文件是什么文件呢,copyaddressandwget下来看看:文件playlist.m3u8内容如下,可见网页里的视频是根据这个play…

    2022年7月18日
  • class文件和dex文件「建议收藏」

    class文件和dex文件「建议收藏」Class文件1、什么是class文件能够被JVM识别,加载并执行的文件格式。2、class文件的生成![这里写图片描述](https://img-blog.csdn.net/20180817160829200?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RldmVsb3BBbmRyb2lk/font/5a6L5L2T/f…

    2022年6月27日
  • 开源流程引擎_docker源码分析

    开源流程引擎_docker源码分析开源流程引擎Snaker

    2022年10月20日

发表回复

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

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