Python multiprocessing 多进程

news2024/11/27 0:22:54

在multiporcessing中,通过新建Process对象创建进程,然后用start()方法调用它。Process与threading.Thread类似。如下是一个简单的例子:

from multiprocessing import Process

def f(name):
    print('hello' ,name)

if __name__ == '__main__':
    p = Process(target=f, args('bob',))
    p.start()
    p.join()

Queues

from multiprocessing import Process, Queue

def f(q):
    q.put([42, None, 'hello'])

if __name__ == '__main__':
    q = Queue()
    p = Process(target=f, args=(q,))
    p.start()
    print(q.get())    # prints "[42, None, 'hello']"
    p.join()

Queues是线程和进程安全的。

Pipes

Pipe可以是单向(half-duplex),也可以是双向(duplex)。我们通过mutiprocessing.Pipe(duplex=False)创建单向管道 (默认为双向)。一个进程从PIPE一端输入对象,然后被PIPE另一端的进程接收,单向管道只允许管道一端的进程输入,而双向管道则允许从两端输入。 

import multiprocessing as mul


def proc1(pipe):
    pipe.send('hello')
    print('proc1 rec:', pipe.recv())


def proc2(pipe):
    print('proc2 rec:', pipe.recv())
    pipe.send('hello, too')


# Build a pipe
pipe = mul.Pipe()
if __name__ == '__main__':
    # Pass an end of the pipe to process 1
    p1 = mul.Process(target=proc1, args=(pipe[0],))
    # Pass the other end of the pipe to process 2
    p2 = mul.Process(target=proc2, args=(pipe[1],))
    p1.start()
    p2.start()
    p1.join()
    p2.join()
proc2 rec: hello
proc1 rec: hello, too

Pipe()函数返回一对用pipe连接在一起的对象,默认情况下是双向的。例如:

from multiprocessing import Process, Pipe

def f(conn):
    conn.send([42, None, 'hello'])
    conn.close()

if __name__ == '__main__':
    parent_conn, child_conn = Pipe()
    p = Process(target=f, args=(child_conn,))
    p.start()
    print(parent_conn.recv())   # prints "[42, None, 'hello']"
    p.join()

使用Pipe()表示管道的两端,用来连接两个对象。每个连接的对象有send()和recv()方法。注意,如果两个进程(或线程)尝试在同一时间往pipe的一端读取或写入,在pipe中的数据会出现问题。当然,在同一时间使用不同pipe的不同的端就不回出现问题。

参考:

https://www.cnblogs.com/gmhappy/p/11863960.html

https://hiteshmishra708.medium.com/multiprocessing-in-python-c6735fa70f3f

Python多进程并行操作-multiprocessing简单使用 - 知乎 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/724367.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2D和3D双管齐下才是王道?KAUST联合Snap、VGG提出单张图像三维重建的Magic123框架

在最近的AIGC社区中,3D视觉生成领域越来越受到广泛的关注,以神经辐射场(NeRFs) 为基础的深度渲染网络向大家展示了非常惊艳的三维效果。可是,NeRFs需要大量的多视角图片作为监督,因而从单张2D图像进行3D重建…

昆仑万维的“天工”能否改变人工智能应用的格局?

在人工智能领域,昆仑万维公司近日引发了广泛关注,发布了名为“天工”的大语言模型。这一新的技术突破引发了人们对于人工智能应用格局是否会被改变的讨论。随着昆仑万维进军大型语言模型市场,人们开始思考,“天工”能否成为人工智…

面部表情动画数据捕捉利器——AH表情捕捉头盔

在游戏制作、电视广告、影视动画制作中,逐渐开始采用面部捕捉头盔进行采集表情面部数据。广州虚拟动力推出的AH表情捕捉头盔,能够轻松创建实时逼真的面部动画,搭配广州虚拟动力的动作捕捉系统VDMocap Studio Plus,能够自动运算出表…

第八章:怎样远程连接+远程连接常用工具+Teamviewer详解

目录 一、什么是远程连接 二、为什么需要远程连接 三、常用的远程连接工具 四、Teamviewer 一、什么是远程连接 远程连接就是在远程连接另外一台计算机。当某台计算机开启了远程桌面连接功能后我们就可以在网络的另一端控制这台计算机了,通过远程桌面功能我们可…

基于Java校园二手物品交易平台设计实现(源码+lw+部署文档+讲解等)

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

hive函数dayofweek的奇怪用法

hive函数dayofweek的奇怪用法 1.单独使用 select dayofweek(2023-07-03); 周一 2 select dayofweek(2023-07-04); 周二 3 select dayofweek(2023-07-05); 周三 4 select dayofweek(2023-07-06); 周四 5 select dayofweek(2023-07-07); 周五 6 select dayofweek(2023-07-08); …

VIO在ARM上的加速(2)- Neon

VIO在ARM上的加速: VIO在ARM上的加速(1)- ARM加速基础 VIO在ARM上的加速(2)- Neon VIO在ARM上的加速(3)- Neon在VIO中的应用 1 NEON的概述 ARM 处理器中使用的高级 SIMD 扩展的实现称为 NE…

【数据结构与算法】魔王语言解释(C/C++)

实践要求 1. 问题描述 有一个魔王总是使用自己的一种非常精炼而抽象的语言讲话,没有人能听懂。但他的语言是可以逐步解释成人能懂的语言的,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的: 形式一 α → β 1 β 2 . . . β m \alpha \…

无线耳机推荐的品牌有哪些?八款无线蓝牙耳机推荐

无线蓝牙耳机无疑是当前最受欢迎的数码产品之一,平听闲暇时刻听听歌或者是运动健身,常常能看到蓝牙耳机的身影,作为一个热衷于听歌的精致boy,佩戴过的蓝牙耳机数不胜数,现在,除了手机品牌会开发无线蓝牙耳机…

西电_矩阵论_学习笔记

文章目录 【 第一章 线性空间 】【 第二章 范数 】【 第三章 矩阵函数 】【 第四章 矩阵分解 】【 第五章 矩阵特征值估计 】【 第六章 广义逆 】【 考试重点内容总结 】 这是博主2023春季西电所学矩阵论的思维导图(软件是幕布),供大家参考&a…

ROS:工作空间覆盖

目录 一、概念二、示例2.1操作2.2原因 三、存在的问题 一、概念 所谓工作空间覆盖,是指不同工作空间中,存在重名的功能包的情形。 ROS 开发中,会自定义工作空间且自定义工作空间可以同时存在多个,可能会出现一种情况: 虽然特定工…

【数学建模】 灰色预测模型

数学建模——预测模型简介 https://www.cnblogs.com/somedayLi/p/9542835.html 灰色预测模型 https://blog.csdn.net/qq_39798423/article/details/89283000?ops_request_misc&request_id&biz_id102&utm_term%E7%81%B0%E8%89%B2%E9%A2%84%E6%B5%8B%E6%A8%…

开放式耳机哪个好?2023开放式耳机排行榜推荐

​耳机成为了当代青年必不可少的一款数码单品,无论在什么时间、哪个地点总能看到很多人戴着耳机。耳机也分有很多类型,就比如市面上大火的开放式耳机,很多人还不清楚开放式耳机如何挑选的,下面我来推荐几款很不错的开放式耳机&…

【一】部署Zabbix监控详解

Zabbix监控 1.Zabbix监控概述1.1 zabbix是什么1.2 zabbix监控原理1.3 Zabbix 6.0新特性1.4 Zabbix 6.0功能组件1.5 Zabbix与prometheus区别对比 2. 部署Zabbix6.02.1 安装NginxPHP2.2 部署Mariadb数据库2.3 安装zabbix Server服务端2.4 部署Web前端,进行访问2.5 部署…

软件测试中的二八定律到底是什么?

目录 前言: 一、80%的软件缺陷,集聚在软件20%的模块中 二、软件测试工作尽早介入 三、反映在软件测试的自动化方面 四、80%的缺陷,集中在某20%的开发工程师代码中; 一、缺陷是解决不完的 二、是不可能发现100%缺陷的 三、…

Web APls-day04

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 日期对象 日期对象:用来表示时间的对象 作用:可以得到当前系统时间 实例化 在代码中发现…

【设计模式】第九章:外观模式(门面模式)详解及应用案例

系列文章 【设计模式】七大设计原则 【设计模式】第一章:单例模式 【设计模式】第二章:工厂模式 【设计模式】第三章:建造者模式 【设计模式】第四章:原型模式 【设计模式】第五章:适配器模式 【设计模式】第六章&…

17 MFC进程通信

文章目录 剪切板管道匿名管道父进程写入数据子进程读出数据 命名管道 邮槽邮槽服务器邮槽客户端 剪切板 设置界面 发送 //设置剪切板数据 void CClipboardDlg::OnBnClickedBtnSend() {UpdateData(TRUE);if (m_strSend.IsEmpty()){MessageBox(L"请输入需要设置的文本&quo…

spring的事务处理@Trasactional Aop处理第二弹

书接上回 ,我们针对spring中的ApplicationContext类的扩展功能-事件发布和监听处理源码进行了解析,知道了消息是如何存放和传递给监听器处理的。这章我们看下另外一个重量级的组件Transactional事务处理是如何实现的。 我们可能都了解过声明式的事务处理…

十三、弹性容器flex的样式1

目录&#xff1a; 1.基础准备 2.属性解析 一、基础准备 设置ul为弹性元素&#xff0c;默认是flex-direction:row&#xff0c;所以不用设置&#xff0c;然后在让里面的方块不进行伸缩。 我们看到小方块超出了边框 <style>*{margin: 0;padding: 0;list-style: none;}ul{wi…