Python学习日记-第三十五天-进程(进阶用法)

PyThon随机睡眠0.01-0.001秒 PyThon随机睡眠0.01-0.001秒 # 导包 import time import random def sleep_random_second(num): while num < 5: # random.uniform可以实现沉睡0.01-0.001秒,需要round来保证有效数字 time.sleep(round(random.uniform(0.001, 0.01), 3)) print("======================= 阅读详情

系列文章目录

  • 通过队列完成进程间的通信,实现数据共享
  • 进程池Pool

一、通过队列完成进程间的通信,实现数据共享

·socket是进程间通信的一种

下面介绍一下Queue队列,传输的信息是先进先出,例如:传进去的信息是 A B ,则拿出来的顺序也是A B

核心点就是在多个进程之间打通了一个通道

放数据是用 put(需要放的数据)

取数据是用 get()

操作:

 代码:

import multiprocessing


def downloud_from_web(q):
    # 模拟从网上下载的数据
    data = [11, 22, 33]

    # 向队列中写入数据
    for temp in data:
        q.put(temp)
    print("下载器已经下载完成了数据并存入到队列中")


def analysis_data(q):
    # 模拟数据处理,从队列获取数据
    waitting_analysis_data = list()
    while True:
        data = q.get()
        waitting_analysis_data.append(data)

        if q.empty():
            break
    print(waitting_analysis_data)


def main():
    # 1.创建一个队列
    q = multiprocessing.Queue()

    # 2.创建多个进程,将队列的引用当做实参进行传递到里面
    p1 = multiprocessing.Process(target=downloud_from_web, args=(q,))
    p2 = multiprocessing.Process(target=analysis_data, args=(q,))

    p1.start()
    p2.start()


if __name__ == "__main__":
    main()

输出结果:

 


二、进程池Pool

当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态生成多个进程,但如果是上百甚至上千个目标,手动的去创建进程的工作量巨大,此时可以用到multiprocessing模块提供的Pool方法

初始化Pool时,可以指定一个最大的进程数,当有新的请求提交到Pool中时,如果池还没有满,那么就会创建一个新的进程来执行该请求,但如果池中进程数已经达到指定的最大值,那么该请求就会等待,直到池中有新的进程结束,才会用之前的进程来执行新的任务

下面是进程池的创建:

 代码:

# -+- coding:utf-8 -+-
from multiprocessing import Pool
import os, time, random


def worker(msg):
    t_start = time.time()
    print("%s开始执行,进程号为%d" % (msg, os.getpid()))
    # random.random()随机生成0-1之间的浮点数
    time.sleep(random.random()*2)
    t_stop = time.time()
    print(msg, "执行完毕,耗时%0.2f" % (t_stop-t_start))


def main():
    # 定义一个进程池,最大进程数3
    p = Pool(3)
    for i in range(0, 10):
        #   Pool().apply_async(要调用的目标,(传递给目标的参数元祖,))
        # 每次循环将会用空闲出来的子进程去调用目标
        p.apply_async(worker, (i,))

    print("---start---")
    p.close()  # 关闭进程池,关闭后p不再接收新的请求
    p.join()  #等待p 中所有的子进程执行完成,必须放在close后面
    print("---end___")


if __name__ == "__main__":
    main()

输出结果:

 

Python星球日记》第22:NumPy 基础 Python星球🪐之旅第22,NumPy(Numerical Python)是Python中用于科学计算的基础库,它提供了高性能的多维数组对象和处理这些数组的工具。NumPy是数据分析、机器学习等领域的基础,几乎所有数据科学相关的Python库都以NumPy为基础。高效的内存管理:NumPy数组在内存中是连续存储的,比Python原生列表更加高效执行速度快:NumPy底层使用C语言实现,处理大规模数据时比Python原生列表快10-100倍丰富的数学函数:内置了大量的数学函数和线性代数操作广播功能。 阅读详情

相关推荐

Python星球日记 - 第19:Web开发基础

Python星球日记》第19带您探索Web开发基础,通过Flask框架构建个人博客网站。文章详细讲解路由设计、模板渲染及最佳实践,从零开始轻松入门Python网站开发,快速实现从想法到成品的转变。

Code_流苏:在代码中寻诗意,在实践中觅真知 1437

python time random模块使用

最近写的一个程序中需要用到延迟秒数,固定的描述感觉不是太合适,所以就用了随机数 使用的模块为: #timesleep #random的randint 代码为: import time,random #时间模块 def ttime(t): t = time.sleep(t) return t r = random.randint(1,5) def ttext(ms...

qq_42791803的博客 340

Python星球日记》第29:Flask进阶

Python星球日记》第29:Flask进阶,深入Flask进阶特性,掌握路由、Jinja2模板与静态文件管理,并通过实战构建完整动态博客系统,提升Python Web开发能力。

Code_流苏:在代码中寻诗意,在实践中觅真知 1027

python time sleep random_Pythonrandom模块和time模块

import randomx = random.random()y = random.random()print(x,y*10)#random.random()随机生成一个[0,1)之间的随机数m = random.randint(0,10)print(m)#random.randint()随机生成一个[0:10]之间的整数st1 = random.choice(list(range(10)))s...

weixin_39847728的博客 473

Python】多进程(二)

socket基于tcp协议的多进程(异步) server端代码 import socket from multiprocessing import Process def chat(conn): while True: # 接收消息,打印消息 msg = conn.recv(1024).decode('utf-8') print(msg) conn.send((msg + '_sb').encode('utf-8')) conn.c

mjiansun的专栏 458

python time sleep random_Python—时间模块(time)和随机模块(random)

时间模块time模块获取秒级时间戳、毫秒级时间戳、微秒级时间戳import timet = time.time()print t # 原始时间数据 1574502460.90print int(t) # 秒级时间戳:10位 1574502460print int(round(t * 100...

weixin_39862899的博客 766

学习日记26:认知升级与效率提升方法论

学习日记作为一种认知管理工具,通过系统化记录实现知识留存与思维升级。基于艾宾浩斯遗忘曲线原理,持续26学习记录能形成显著的知识复利效应,提升40%以上的记忆留存率。在工程实践层面,采用概念映射、问题溯源等结构化方法,可以有效突破学习瓶颈期。数字化工具如Obsidian和Notion的双向链接功能,特别适合构建个人知识网络。对于技术学习者而言,DAY26是优化学习路径的关键节点,此时建立的三色标注体系和20%关键点法则,能够显著提升问题解决效率。

weixin_30487201的博客 411

python 学习日记 第35 并发——进程

一、什么是进程?   1. 进程(Process): 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统机构的基础   2.进程的组成:     a.代码段: 用来描述进程要完成那些功能以及如何完成     b.数据段: 程序在执行过程中所需要使用的资源     c.PCB(进程管理控制):记录进程的外部特征,描述进程的执行变化过程,...

a1364724938的博客 147

Python星球日记》 第93:MLOps 入门

Python星球日记》 第93:MLOps 入门,今我们将踏入MLOps的世界,这是AI项目成功落地的关键环节!

Code_流苏:在代码中寻诗意,在实践中觅真知 1327

Python星球日记》第23Pandas基础

Python星球日记》第23PandasPython中用于数据分析和数据处理的强大库,它提供了灵活高效的数据结构,使处理"关系"或"标签"数据既简单又直观。Pandas的名称来源于"Panel Data"(面板数据)和"Python Data Analysis"(Python数据分析)的组合。高效的数据结构:提供了Series(一维)和DataFrame(二维)两种主要数据结构,适合处理大多数实际数据分析需求强大的数据操作功能:支持数据清洗、转换、过滤、分组、聚合等复杂操作与NumPy的无缝集成。

Code_流苏:在代码中寻诗意,在实践中觅真知 957

[Python学习日记-86] 并发编程之多进程 —— 守护进程

​在 Python 的并发编程领域,多进程模块 multiprocessing 是处理 CPU 密集型任务的重要工具。其中,守护进程(Daemon Process)作为一种特殊进程类型,具有自动清理、资源隔离等特性。本文将从底层原理到实战案例,深入剖析守护进程的使用场景、实现方式及注意事项。

JovaZou的成长之路 1581

Python星球日记》专栏介绍(持续更新...

Python星球日记专栏介绍(持续更新ing),本专栏文章或达近百篇,后续会持续更新...

Code_流苏:在代码中寻诗意,在实践中觅真知 3230

[Python学习日记-84] 并发编程之多进程 —— 进程理论

进程理论是计算机科学中一种重要的概念,用来描述操作系统中执行的程序实例。在操作系统中,每个程序的执行被称为一个进程进程理论研究进程的创建、调度、通信、同步和终止等方面的原理和方法。本篇我们将介绍进程的概念、进程的创建和终止,以及并发与并行的区别,并了解并发的实现。

JovaZou的成长之路 871

Python星球日记》第31:Django 框架入门

Python星球日记》第31:Django 框架入门,今我们将探索Python世界中最流行的Web框架之一——Django。经过前面对Flask的学习,今我们将接触一个更加全面和强大的框架,它能够帮助我们构建复杂的Web应用。

Code_流苏:在代码中寻诗意,在实践中觅真知 1139

算法刷题日记 1106

你好,我是 zhenguo1 开源两门教程今我把发布在Python 中文网(zglg.work)的两门教程:Python 小白入门和 Python 进阶 20 个专题,继续校对一遍,修复...

算法channel 306

Python星球日记 - 第21:基础阶段大总结

Python星球日记》21基础阶段总结,回顾基础知识到实用技能的完整学习旅程,分享心得并指引进阶方向,一起来看看吧!

Code_流苏:在代码中寻诗意,在实践中觅真知 1148

【21Python进阶学习挑战赛】[day1]正则表达式大总结

一气道盟王富贵儿是也(停止中二)。一个在CSDN写划水日记、减肥打卡、罗翔读书笔记的神奇生物。双非理工院校CS专业菜狗一只,本科毕业后在养老型公司划水三年啦(有点出息,求你)。莫得感情的工具人·java开发。一切大佬会的我都不会,大佬不会的,我更不会。但是,人活着总要有点幻想,总觉得这条路走不通换条路或许就好了,所以来学python.........

一气道盟王富贵儿 493

[Python学习日记-89] 并发编程之多进程 —— 共享数据、信号量、事件、进程

Python 编程中,并发编程能够显著提升程序的执行效率。多进程作为并发编程的重要方式之一,能够充分利用多核 CPU 的优势,实现真正的并行计算。在前面多篇博客的介绍多进程的主要内容介绍得差不多了。但是还有共享数据、信号量、事件、进程池这些尾巴,其中信号量、事件只需要了解一下就可以了,下面我们一起来看看这些知识吧。

JovaZou的成长之路 883
上一篇: Python学习日记-第三十四天-进程
下一篇: Python学习日记-第三十六天-进程演练
差点长成吴彦祖
博客等级 码龄4年 75粉丝 43原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值