Python 多进程

单例模式

面试中,就被问到了这个问题,你知道用python怎么创建一个单例模式吗? 单例模式是什么? 就是这个对象只能被创建一次。 每次实例化,都是同一个对象。

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例 模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约 系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

全局解释器锁 (GIL)

即使电脑有多核CPU,单个时刻也只能运行1个线程,遇到io之后转换到另一个线程运行。

为什么要有这个GIL,为了解决多线程之间数据完整性和状态同步问题。有了GIL简化了Python对于共享 资源的管理。

Python 多进程

进程

进程时系统分配资源的单位,一个进程可以有多个线程;

进程的状态有:新建,就绪,运行,等待,死亡。

并行:真的多任务; 并发: 假的多任务;

multiprocessing

import multiprocessing
import time
 
food="aaaaa"
  
def singing():
    while True:
        print("singing...")
        time.sleep(1)
def dancing():
    while True:
        print("dancing...")
        time.sleep(1)
def main():
    p1 = multiprocessing.Process(target=singing)
    p2 = multiprocessing.Process(target=dancing)
    p1.start()
    p2.start()
if __name__ == "__main__":
    main()

多进程的创建与多线程极其相似。线程一般是共享主进程的一些变量,而进程可以理解为将主进程的资 源复制一份,相比于线程,进程耗费的资源较多。

同一台电脑启动两个微信,就是两个进程。而一个微信,开多个聊天框,就是多线程。

进程是完全独立的,于线程不同,需要某个介质,实现线程之间的通信

通过队列完成进程通信

队列,先进先出。

from multiprocessing import Queue
##
myque = Queue(3)
myque.put(1)
myque.put(2)
myque.put(3)
myque.put(4) # 超过队列长度 ,会等待
myque.get() 
myque.get()
myque.get()
myque.get()# 先放谁 先取谁。如果为空,就会等待,阻塞

生产者消费者线程,利用队列进行通信

from multiprocessing import Process,Queue,set_start_method,get_context
import time
def download_from_web(q):
    i=0
    while True:
        i += 1
        q.put(i)
        print(f'放入{i}')
        time.sleep(1)
def analysis_data(q):
    """处理数据"""
    watting_analysis_data = list()
    while True:
        data = q.get()
        watting_analysis_data.append(data)
        print(watting_analysis_data)
        time.sleep(4)
        # if q.empty(): # 如果放的很慢 就会停掉消费者
        #     break
    # print(watting_analysis_data)
def main():
    q = Queue(10)
    # 放入和取出 两边都while true,这样队列没有的话,不能取,会等待放入
    # 队列满了的话 不能放,会等待取出
    ctx = get_context('fork')
    p1 = ctx.Process(target=download_from_web,args=(q,))
    p2 = ctx.Process(target=analysis_data,args=(q,))
    p1.start()
    p2.start()
if __name__ == "__main__":
    main()

进程池

当要创建的进程数量不多时,可以利用multiprocessing中的Procss动态生成多个进程,但如果需要创建 成千上百个目标,可以利用进程池Pool方法。

from multiprocessing import Pool
import os, time, random
def work(i):
    
    time.sleep(random.random()*3)
    print("进程{} running ....".format(i),"--pid {}".format(os.getpid()))
if __name__ == '__main__':
    po = Pool(3)
    for i in range(10):
        po.apply_async(work,(i,))
    print("-----start-------")
    po.close()
    po.join()
    print("-----end-------")

线程池里的Queue用multiprocessing下的manager.queue

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UE5.2打包安卓

目录 简介: 一. 根据官网配置 二. 手动定位SDK路径 三: 设置Android基本信息 四: 设置KeyStore 五: 开始打包 六:其他 七. 总结 简介: UE5.2 打包安卓是指将使用 Unreal Engine 5.2 开发的项目编译为可在安卓设备上运行的安装包。 以下是一般的打包步骤: 安装…

交易中的群体行为特征和决策模型

本文基于人的行为和心理特征,归纳出交易中群体的行为决策模型,并基于这个模型,分析股价波浪运行背后的逻辑,以及投机情绪的周期变化规律,以此指导交易,分析潜在的风险和机会,寻找并等待高性价比…

Java:九九乘法表,打印三角形

文章目录 九九乘法表打印三角形改进:控制行数的三角形有空格的三角形 九九乘法表 package com.zhang; /* 打印九九乘法表*/ public class Test8 {public static void main(String[] args) {//i是竖着的 j是横着的for (int i 1; i < 9; i) {for(int j 1; j < 9; j) {i…

流批一体计算引擎-10-[Flink]中的常用算子和DataStream转换

pyflink 处理 kafka数据 1 DataStream API 示例代码 从非空集合中读取数据&#xff0c;并将结果写入本地文件系统。 from pyflink.common.serialization import Encoder from pyflink.common.typeinfo import Types from pyflink.datastream import StreamExecutionEnviron…

【Vue】图形验证码功能

说明&#xff1a; 图形验证码&#xff0c;本质就是一个请求回来的图片用户将来输入图形验证码&#xff0c;用于强制人机交互&#xff0c;可以抵御机器自动化攻击 (例如&#xff1a;避免批量请求获取短信) 需求&#xff1a; 动态将请求回来的 base64 图片&#xff0c;解析渲染…

【面试干货】聚集索引和非聚集索引区别?

【面试干货】聚集索引和非聚集索引区别? 1、聚集索引&#xff08;Clustered Index&#xff09;1.1 特点1.2 例子 2、非聚集索引&#xff08;Nonclustered Index&#xff09;2.1 特点2.2 例子 3、根本区别 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&…

秋招突击——6/10——复习{(树形DP)树的最长路径、}——新作{电话号码的字母组合}

文章目录 引言复习树形DP——树的最长路径思路分析参考思路求图的最长的直径的通用方法证明 树形DP分析方法问题 参考代码使用一维数组模拟邻接表存储树形结构或者稀疏图 新作电话号码的组合思路分析参考实现 总结 引言 中间面试了两天&#xff0c;去上海呆了一天&#xff0c;…

小熊家务帮day19-day21 订单模块2(取消订单,退款功能等)

目录 1 订单退款功能1.1 需求分析1.2 接口分析1.3 退款流程分析1.4 表结构设计1.5 取消未支付订单实现1.5.1 接口开发Controller层开发Service层开发 1.5.2 接口测试 1.5 取消已支付订单实现 1 订单退款功能 1.1 需求分析 用户下单成功可以取消订单&#xff0c;在订单的不同状…

机器视觉系统-同轴光源大小选择技巧

同轴光源多用于检测光滑平面产品上的缺陷&#xff0c;同样利用上述的方法计算得出光源尺寸。 实际上&#xff0c;同轴光源可理解为没有孔的开孔面光&#xff0c;因此可等效为发光面相等的面光源&#xff0c;如下图&#xff1a; 如图所示&#xff0c;同轴光源的效果与开孔面光的…

【Labview】通过串口通信从上位机读取和写入数据

最近博主需要通过Labview的上位机控制一个温控仪表&#xff0c;主要实现在上位机读取实时温度和设定的目标温度&#xff0c;以及通过上位机设定目标温度。这里将其中遇到的问题和心得分享给大家&#xff0c;博主自己也做一个记录。 由于温控仪表采用的485通讯&#xff0c;modb…

王学岗鸿蒙开发(北向)——————(十)子组件修改父组件的内容与 动画

子组件修改父组件的内容 使用类似Android的回调&#xff0c;父组件传递给子组件一个函数 import { MyComment } from ./component/MyComment import { MyContent } from ./component/MyComtent import { MyTitleComponent } from ./component/MyTitleComponentEntry Componen…

现代x86汇编-环境安装

今天端午节&#xff0c;独自在家&#xff0c;翻阅了张银奎老师编写的《现代x86汇编语言程序设计》一书&#xff0c;前言部分说明书中示例代码都是用微软visual C工具编写并使用微软宏汇编&#xff08;著名的MASM&#xff09;编译的&#xff0c;好久没有用微软vc了&#xff0c;假…

18.2 HTTP服务器-处理函数、响应404错误

1. 处理函数 处理来自客户端的请求&#xff0c;并回之以特定的响应&#xff0c;这是处理函数的主要任务。在处理函数中&#xff0c;我们通常会完成如下工作&#xff1a; 验证请求路径 http.Request.URL.Pathhttp.NotFound(...) 当请求没有对应的处理函数时&#xff0c;返回4…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《计及电-气园区综合能源系统多重不确定性的变置信区间优化调度 》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

物联网概念

物联网 物联网简介物联网体系结构物联网体系结构定义物联网体系结构设计原则物联网体系结构四层物联网体系结构感知控制层数据传输层数据处理层应用决策层 物联网关键技术感知标识技术网络与通信技术云计算技术安全技术 已有物联网相关应用架构无线传感器网络的体系结构EPC/UID…

【讲解下Chrome DevTools,什么是Chrome DevTools?】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

精神建设:为什么要学C语言以及如何学习C语言

一&#xff0c;为什么要学习C语言 学习C语言有以下几个重要原因&#xff1a; 基础性&#xff1a;C语言是一种非常基础的编程语言&#xff0c;它接近计算机硬件层面&#xff0c;让你能够更深入地理解计算机系统如何工作&#xff0c;包括内存管理、指针操作等。这对于构建坚实的…

2024年6月最新开源电视影视TVAPP原生源码和后台管理平台源码及完整教程

本套源码为本人维护更新完善半年左右的还在使用开发的源码&#xff0c;与市面上倒卖的残次品不一样&#xff0c;没有可比性&#xff0c;向下兼容安卓4.0&#xff0c;向上兼容安卓13以上TV电视系统&#xff0c; 完全无闪退&#xff0c;弹窗报错&#xff0c;卡死、异常死循环残次…

[FreeRTOS 基础知识] 任务调度 与 链表

文章目录 任务并行的概念RTOS如何实现多任务调度&#xff1f; 任务并行的概念 在生活中&#xff0c;经常出现一心多用的情况。比如你需要一边吃饭一边手机回复信息&#xff0c;这里面就存在两个任务&#xff1a;任务一、吃饭。任务二、手机回复信息。 假如你无法一心多用&…

数据仓库核心:事实表深度解析与设计指南

文章目录 1. 引言1.1基本概念1.2 事实表定义 2. 设计原则2.1 原则一&#xff1a;全面覆盖业务相关事实2.2 原则二&#xff1a;精选与业务过程紧密相关的事实2.3 原则三&#xff1a;拆分不可加事实为可加度量2.4 原则四&#xff1a;明确声明事实表的粒度2.5 原则五&#xff1a;避…