python多进程入门、分布式进程数据共享

Python 多线程与多进程详解 Python并发编程:多线程与多进程 本文介绍了Python中的两种并发编程方式:多线程(threading)和多进程(multiprocessing)。核心区别在于内存管理:线程共享内存而进程独立内存,这影响了它们在数据共享和通信上的不同实现方式。 多线程适合I/O密集型任务,但由于全局解释器锁(GIL)限制,在CPU密集型任务中表现不佳。多进程通过独立内存绕过GIL限制,更适合CPU密集型任务。 文章详细讲解了: 线程/进程的创建方式 进程间通信(IPC)机制如Queue和Pipe 同步工具Lock的使 阅读详情

python多进程入门

https://docs.python.org/3/library/multiprocessing.html

1、先来个简单的

# coding: utf-8

from multiprocessing import Process

# 定义函数
def addUser():
    print("addUser")

if __name__ == "__main__":

    p1 = Process(target=addUser)
    p1.start()

多进程包multiprocessing;
创建进程p1 = Process(target=函数名);
开始进程p1.start()。

2、通过进程ID来区分父子进程

# coding: utf-8

from multiprocessing import Process
import os

# 定义一个list
myList = ["a","b"];
# 定义函数
def addUser(list):
    print(os.getpid()) # 进程ID
    print(os.getppid()) # 父进程ID

if __name__ == "__main__":

    p1 = Process(target=addUser,args=(myList,))
    p1.start()

    # 这里是主进程
    print("父进程ID:"+str(os.getpid()))  # 进程ID
父进程ID:27084
27085
27084

3、主进程等等子进程执行完毕

# 定义一个list
myList = ["a","b"];
# 定义函数
def addUser(list):
    list.append("c")
    print(list)

if __name__ == "__main__":

    p1 = Process(target=addUser,args=(myList,))
    p1.start()

    print(myList)
['a', 'b']
['a', 'b', 'c']

主线程的print(myList)先于子进程的print(list)执行。

在主进程里,只需要加一句代码:

    p1.join() # 等待子进程执行完毕
    print(myList)
['a', 'b', 'c']
['a', 'b']

执行的顺序就不一样了。

分布式进程数据共享

通过Manager实现数据共享。
Manager会创建一个服务进程,其他的进程都统一来访问这个server进程,从而达到多进程之间的数据通信。
一旦主进程结束,则server进程也讲结束

1、不多说,直接上代码

# coding: utf-8

from multiprocessing import Process, Manager


# 定义函数
def addUser(list):
    list.append("c") # 给list添加了一个元素
    print(list)

if __name__ == "__main__":
    mgr = Manager()
    my_list = mgr.list(["a","b"]) # 通过Manager对象创建list

    p1 = Process(target=addUser,args=(my_list,))
    p1.start()

    p1.join()
    print(my_list)

注意2次打印list,在子进程(addUser())里还改变了list数据。我们看看2次打印结果:

['a', 'b', 'c']
['a', 'b', 'c']

说明通过Manager对象创建的list数据能够在进程之间通信了。

2、分布式的数据共享
https://docs.python.org/3/library/multiprocessing.html

2.1、创建一个server

datamgr.py内容如下:

# coding: utf-8

from multiprocessing.managers import BaseManager


if __name__ == "__main__":
     mgr = BaseManager(address=('127.0.0.1', 50000), authkey=b'password')
     mgr.register("getUser", callable=lambda :["a","b"])

     # server永不关闭
     server = mgr.get_server()
     server.serve_forever()

作为数据提供者。

2.2、在test.py里(可能是另外一台服务器里) 连接这个server

# coding: utf-8

from multiprocessing import Process, Manager
from multiprocessing.managers import BaseManager

if __name__ == "__main__":

    mgr = BaseManager(address=('127.0.0.1', 50000), authkey=b'password')
    mgr.register("getUser")
    mgr.connect() # 连接远程的server

    my_list = mgr.getUser() # 从server获取数据

    print(my_list) # ['a', 'b']

连上了,并获取到了数据。

3、创建2个子进程,修改list数据,看看是不是能够共享?

# 定义函数
def addUser(list):
    list.append("c")

def addUser2(list):
    list.append("d")

if __name__ == "__main__":

    mgr = BaseManager(address=('127.0.0.1', 50000), authkey=b'password')
    mgr.register("getUser")
    mgr.connect() # 连接远程的server

    my_list = mgr.getUser() # 从server获取数据


    # 创建2个子进程
    p1 = Process(target=addUser,args=(my_list,))
    p1.start()

    p2 = Process(target=addUser2, args=(my_list,))
    p2.start()

    # 等待2个子进程执行完毕
    p1.join()
    p2.join()

    # 在主进程打印最终的list
    print(my_list) # ['a', 'b', 'c', 'd']

显然,在子进程里往list添加数据有效。

【Python爬虫(35)】解锁Python多进程爬虫:高效数据抓取秘籍 本文开篇阐述传统单进程爬虫效率低,多进程爬虫可解决此问题。接着介绍多进程爬虫基础,包括优势和 multiprocessing 模块;阐述如何实现高性能爬虫,涵盖架构设计与代码示例;探讨利用进程池分配管理任务,涉及概念、Pool 类使用及策略;分析多进程爬虫数据共享与同步,介绍 Manager 对象、锁机制等;最后通过抓取网页数据案例,展示从 URL 获取到结果分析优化全过程,展望其与 AI 等融合的未来发展。 阅读详情

相关推荐

Ubuntu 24.04 下 NoMachine 极速安装与远程桌面配置全攻略

本文详细介绍了在Ubuntu 24.04系统下安装和配置NoMachine远程桌面的完整指南。从系统准备、分步安装到性能调优和常见问题解决,帮助用户快速实现低延迟的远程桌面访问。特别适合开发者和IT管理员在Linux环境下高效部署远程工作环境。

moon9的博客 945

进程之间的数据共享

3、主代码与子进程之间共享变量,方式有很多种:管道、消息队列、共享内存和套接字等方式,共享变量若是string类型,则需要将其转化为char []形式,因为string空间是不固定的,无法解析其大小;2、关于深度模型预测这块代码,若是子进程里面用到模型预测,一定需要模型在子进程中进行声明与初始化,否则代码出错,同时模型预测会混乱。该函数用于将共享内存从当前进程中分离。注意,将共享内存分离并不是删除它,只是使该共享内存对当前进程不再可用;启动对该共享内存的访问,并把共享内存连接到当前进程的地址空间;

沐凡星的博客 831

量化回测系统实战指南:从VectorBT到自研框架的深度解析

本文深入解析量化回测系统实战,从VectorBT和Backtesting.py的对比到自研框架miniQuant的设计与优化。探讨如何平衡速度与灵活性,解决实盘适配性问题,并提供性能调优技巧和可视化分析工具,帮助开发者构建高效可靠的量化交易系统。

weixin_28308325的博客 276

python多进程实现数据共享

多进程数据共享

qq_38312411的博客 4936

AI自动打游戏全攻略:从环境搭建到Agent训练实战

本文系统介绍了AI自动打游戏的技术实现方案,重点解析了强化学习(DQN算法)在贪吃蛇游戏中的应用。文章从技术选型入手,对比了强化学习与计算机视觉两种方案,详细说明了开发环境配置步骤,并深入讲解了DQN模型构建、游戏环境封装、训练优化等核心环节。通过经验回放和目标网络等技术,有效提升了AI的学习效率和稳定性。该方案具有通用性,只需调整参数即可应用于其他简单游戏场景,为开发者实现游戏AI提供了完整的技术路径。

milk416666的博客 4109

Mixer-First Receiver适用于宽带阵列应用的接收机技术1

Mixer-First Receiver适用于宽带阵列应用的接收机技术1技术的背景单元级数字化阵列传统链路到Mixer-First链路的逻辑考虑三种场景小结 技术的背景 在文章《吊打全球的顶级毫米波数字阵列项目-MIDAS》中提到了DARPA在MIDAS项目中在毫米波实现宽带单元级数字化阵列用到了一个关键的叫做N-Path filter的技术,而这个技术同样出现在了《让微波射频工程师颤抖的芯片-MATRICs》的MATRICs芯片中。 为什么DARPA的各个合作研究机构选择这种技术?这篇来自Universi

ICONO的博客 2167

Python基础_多进程数据共享

Python中多进程之间的数据共享是一个复杂的主题,因为每个进程都有自己的内存空间和独立的Python解释器实例。这意味着它们不能直接共享数据,就像线程那样。但是,Python提供了几种方法来间接地实现多进程之间的数据共享。

长孤秋落的札记 3067

逆概率加权法(Inverse Probability Weighting, IPW)的原理及R实现

逆概率加权(IPW)是一种用于解释由于非随机选择观测值或人群信息的非随机缺失而造成的缺失和选择偏差的方法。原理:这种方法可以通过对观察值的加权来修正分析,使其具有被选中的概率。IPW是基于这样一个假设,即整个研究人群都有可以预测纳入概率(非遗漏)的个体信息,因此,在考虑到这些信息后,我们可以仅从非遗漏的观察值开始对整个目标人群进行推断。计算的程序如下:首先,我们考虑整个研究人群,用逻辑回归模型计算非失访信息的概率,其中响应是非失访,协变量是其可能的预测因素。每个受试者的权重是由预测概率的倒数给出的。然后使用

Christina 5万+

python多进程系列(三)数据共享

1、p.start(): 当前进程准备就绪,等待被CPU调度(工作单元其实是进程中的线程)p.daemon=False:设置为非守护进程,主进程等待子进程都执行完毕,主进程才结束。p.daemon=True:设置为守护进程,主进程执行完毕,子进程也会自动关闭。2、p.join(): 等待当前进程的任务执行完成后再向下执行。3、p.daemon=布尔值,守护进程(必须放在start之前)4、获取cpu核心数。...

weixin_54542209的博客 1205

基于树莓派4B设计的厨房环境监测系统_368

本项目设计并实现了一种基于树莓派4B的厨房环境监测系统,提升厨房使用过程中的安全性与智能化水平。系统采用树莓派4B作为主控核心,集成DHT11温湿度传感器、MQ2烟雾传感器、火焰传感器、光敏传感器、水滴检测传感器等多种传感器,实现对厨房环境温湿度、烟雾、火焰、光照与溢水等参数的实时监测,并通过蜂鸣器进行本地报警。系统通过WIFI连接互联网,利用MQTT协议将环境数据上传至华为云物联网平台,实现远程可视化监控。

415

深入理解SQL注入中的union select 1,2,3....

UNION 用于合并两个查询的结果集

渗透之路,攻防之间皆学问 2万+

Python 进程之间共享数据

  最近遇到多进程共享数据的问题,到网上查了有几篇博客写的蛮好的,记录下来方便以后查看。 一、Python multiprocessing 跨进程对象共享   在mp库当中,跨进程对象共享有三种方式,第一种仅适用于原生机器类型,即python.ctypes当中的类型,这种在mp库的文档当中称为shared memory方式,即通过共享内存共享对象;另外一种称之为server pr...

dati4434的博客 1266

WOFOST作物模型(1):PCSE环境配置

get_summary_output() 方法通常用于在 PCSE 模拟过程结束后,获取模拟结果的摘要信息,例如模拟期间的总产量、总水分需求等。它可以提供对模拟结果的快速总结,方便用户进行后续的分析和处理。用.get_output来获取过程参数,并将这些参数转为dataframe显示。用run_till_terminate()代表终止。安装好之后,打开jupyter notebook。也可以指定运行时间,并获取最后一天的参数。首先还是打开之前建好的gee虚拟环境。

所有专家都曾始于新手 681

python 多进程 共享数据_Python多进程入门、分布式进程数据共享实例详解

本文实例讲述了Python多进程入门、分布式进程数据共享。分享给大家供大家参考,具体如下:python多进程入门1、先来个简单的# coding: utf-8from multiprocessing import Process# 定义函数def addUser():print("addUser")if __name__ == "__main__":p1 = Process(target=addU...

weixin_39628945的博客 261

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

python多进程 共享 实例_Python多进程入门、分布式进程数据共享实例详解

Python多进程入门、分布式进程数据共享实例详解发布时间:2020-09-20 11:22:33来源:脚本之家阅读:114本文实例讲述了Python多进程入门、分布式进程数据共享。分享给大家供大家参考,具体如下:python多进程入门https://docs.python.org/3/library/multiprocessing.html1、先来个简单的# coding: utf-8from ...

weixin_39747049的博客 121

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Python多进程学习及实现多进程版文件复制器

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。程序是固定不变的,而进程会根据运行需要,让操作系统动态分配各种资源。另外,CPU的时间片轮转就是在切换执行不同的进程,但进程切换比较浪费时间,就引进了轻量级进程,也就是所谓的线程,一个进程包括多个线程。

2401_82928104的博客 2075

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

详解Python多线程、多进程

在学习Python的过程中,有接触到多线程编程相关的知识点,先前一直都没有彻底的搞明白。今天准备花一些时间,把里面的细节尽可能的梳理清楚。

2301_76161259的博客 2483

推荐文章:解锁多进程下的数据共享——探索UltraDict的强大力量

推荐文章:解锁多进程下的数据共享——探索UltraDict的强大力量 项目介绍 在高速发展的软件世界里,多进程编程成为了提升应用性能的关键手段之一。然而,在多进程环境中高效同步数据,特别是字典这样的复杂结构,一直是一个挑战。UltraDict正是为此而生,它以共享内存作为后端,提供了一种流式更新的高级解决方案,使得多进程间的数据交换变得既快速又便捷。 项目技术分析 UltraDict巧妙地利用了P...

gitblog_00678的博客 733

Python多进程性能优化实战:避开陷阱,提升性能的终极指南

本文深入探讨Python多进程编程的性能优化策略,涵盖进程池配置、数据共享机制和序列化优化等关键领域。通过架构图、代码示例和性能数据对比,展示了3-10倍的性能提升方法。文章包含智能进程池实现、无锁数据共享模式、Pickle协议优化等核心技术,以及企业级数据处理和实时流处理案例。同时提供了性能优化黄金法则、检查清单和未来发展趋势,为开发者呈现从基础到高级的完整多进程优化解决方案。通过系统化的分层优化方法,帮助开发者解决实际业务中的性能瓶颈问题。

七夜zippoe的博客 1984

python进阶13并发之九多进程和数据共享

原创博客地址:python进阶13并发之九多进程和数据共享 使用进程,大概率出现情况是,想当然以为共享了,实际没共享。所以最终程序大概率卡死(部分逻辑没有数据进来,导致的业务逻辑性卡住,并非程序死锁) 哪些共享,哪些不共享 默认进程是都不共享,包括全局变量。 父子进程其实处于不同的资源空间(进程是系统分配资源的最小单位),所以2进程其实是完全独立的资源空间,数据自然无法直接交互。如果要交互,必须超越进程内部,进入到操作系统层面,比如文件方式,等进行交互。 其实父子进程是一种非常松散的关系,在一个app

江州司马 345

【测试语言篇五】Python进阶篇之多进程和多线程

数据共享、同步数据共享复杂,同步简单数据共享简单,同步复杂各有优劣内存、CPU占用内存多,切换复杂,CPU利用率低占用内存少,切换简单,CPU利用率高线程占优创建、销毁、切换复杂,速度慢简单,速度快线程占优编程、调试编程简单,调试简单编程复杂,调试复杂进程占优可靠性进程间不会互相影响一个线程挂掉将导致整个进程挂掉进程占优分布式适用于多核、多机,扩展到多台机器简单适合于多核进程占优。

代码搬运工的博客 1216

python多进程存储数据_多进程或多线程,数据共享处理方案-python实现

单进程用得不少,带着单进程的方案来到多进程看一看1.多进程的例子#!/usr/bin/env python# encoding: utf-8"""@version: version 2.6@author: fudelin@license: algo Licence@file: pymain.py@time: 2018/1/18 11:33@spec:"""import queuefrom mult...

weixin_39805119的博客 420

Python学习(十一)进程和线程(多进程、多线程、ThreadLocal、进程vs线程、分布式进程)

Python学习(十一)进程和线程(多进程、多线程、ThreadLocal、进程vs线程、分布式进程)

ACGkaka的博客 745

以Python爬取数据为例,多线程和多进程的优劣

如果我们要爬取多个网站的一些数据 单线程,单进程时 只使用for循环一个个的遍历URL并读取响应,使用IPython的%%time函数统计消耗的时间。 import urllib.request form concurrent.futures import ThreadPoolExecutor urls=[ “https://www.codepku.com/”, “https://www.cod...

u014603907的博客 1621

python多进程协同_python多进程multiprocessing

Multiprocessing是一个类似于threading模块的生成多进程的包,这个包提供了本地和远程的进程并发。使用multiprocessing能够有效的解决python因为在GIL(全局解释锁)下在CPU密集型任务中的瓶颈问题,允许使用多核处理器来运行python脚本程序。官方介绍https://docs.python.org/2/library/multiprocessing.html。...

weixin_39849888的博客 353
上一篇: 抓取基金网站N页JS生成的内容(多页)
下一篇: 多进程方式抓取基金网站内容
学习笔记666
博客等级 码龄12年 1047粉丝 1369原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值