python3 多进程 multiprocess 任务均衡 task-balance 队列 queue V1

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

python3多进程偶尔会有无法停下的bug,因为多进程竞争读取队列时会有Empty exception

所以最好的办法是人为设置进程控制信息,避免因为竞争导致读取队列为空的问题。

[Python,SQL,ETL]交流群 164142295

以下代码完美处理了这个问题

 

 


import time
from multiprocessing import  cpu_count, Queue, Process
from queue import Empty
import traceback


def add(q, index, Q,waste):
    r,b = 0,0
    while 1:
        try:
            args = q.get(block=False)
            if args[0] == 1:
                Q.put(r)
                break
            else:
                r += 1
        except Empty:
            b+=1
            time.sleep(0.001)
            continue
        except:
            print('Unknown Error:')
            traceback.print_exc()
            exit(1)
        #time.sleep(0.00001)
    waste.put(b)

if __name__ == '__main__':
    multipy = 2
    past, cpus = time.time(), cpu_count() * multipy
    Q,waste = Queue(),Queue()
    for j in range(1):
        T, p = Queue(), []
        # Data
        for i in range(500000):
            T.put((0, i, i + 1))
        # Control Signal
        for i in range(cpus):
            T.put((1, i, i + 1))
        for i in range(cpus):
            p.append(Process(target=add, args=(T, i, Q,waste)))
        for i in p:
            i.start()
        for i in p:
            i.join()
        print("JoinFinished")
        tt = []
        while not Q.empty():
            tt.append(Q.get())
        for i, j in enumerate(tt):
            print(f'Process_{i} Return {j}')
        print(f'Total Return {sum(tt)}')
        w=0
        while not waste.empty():
            w+=waste.get()
    print(f'ProgramRunToTheEnd Costs {round(time.time()*1000-past*1000,2)}MS,WasteOfLoop {w} Cycles')
 

python3多进程(使用multiprocessing模块) python3python3多进程(使用multiprocessing模块)1.背景1.1 博客内容:1.2 博客目标:2.multiprocessing.Process2.1 Process常用的方法和属性3.代码4.总结 1.背景 python版本号: import sys print(sys.version) #3.6.8 |Anaconda, Inc.| (default, Feb 21 2019, 18:30:04) [MSC v.1916 64 bit (AMD64)] 平台window 阅读详情

相关推荐

aiomultiprocess:将现代的Python代码库提升到新的性能水平

多进程 将现代的Python代码库提升到新的性能水平。 AsyncIO和多处理本身是有用的,但有局限性:AsyncIO仍然不能超过GIL的速度,并且多处理一次只能处理一个任务。 但是,他们在一起可以充分发挥自己的真正潜力。 aiomultiprocess提供了一个简单的界面,同时在每个子进程上运行完整的AsyncIO事件循环,从而实现了Python应用程序从未有过的并发级别。 每个子进程可以一次执行多个协程,仅受工作量和可用内核数限制。 在几秒钟内收集成千上万的网络请求非常简单: async with Pool () as pool : results = await pool . map ( < coroutine> , < items> ) 安装 aiomultiprocess需要Python 3.6或更高版本。 您可以从PyPI安装它: $ p

探秘高效并发处理利器:`aiomultiprocess`

Python的世界中,我们常常需要处理大量的并发任务,以提高程序的执行效率。`aiomultiprocess`就是这样一款专为异步IO设计的多进程库,它结合了Python的`asyncio`框架和`multiprocessing`模块,使得开发者可以在异步环境下充分利用多核处理器的优势。让我们一起深入了解并体验这款项目的魅力。 ## 项目简介 `aiomultiprocess`(仓库链接: ...

gitblog_00049的博客 838

python标准库、threading、multiprocessing、aiomultiprocess、进程/线程 同步、queue(队列)

multiprocessing 包提供了本地和远程并发操作,通过使用子进程而非线程有效地绕过了全局解释器锁。 因此,multiprocessing 模块允许程序员充分利用给定机器上的多个处理器。

freeking101的博客 2万+

python Queuemultiprocessing的使用,实现进程池负载均衡

废话不多说,直接上代码,利用队列在进程池中通信,实现负载均衡。# -*- coding:utf-8 -*- import multiprocessing import time def run(q, number): # 判断队列不为空 while not q.empty(): print('run_{0}:{1}'.format(number, q.get()...

tiandaochouqin820的博客 1652

python3 多进程讲解 multiprocessing

Python中,模块提供了一个强大的基于进程的并行性。这意味着它允许你利用多个处理器上的多个核心,从而可以显著提高某些类型任务的执行速度。这对于CPU密集型任务特别有用,比如大规模数学计算、图像处理等。

言之。 1万+

python3多进程包_一个异步多进程python包aiomultiprocess

aiomultiprocess是一个异步多进程python库,其依赖于aiohttp和asyncio两个库。aiohttp是一个基于asyncio的异步http客户端和服务器。asyncio 是用来编写 并发 代码的库,使用 async/await 语法。asyncio 被用作多个提供高性能 Python 异步框架的基础,包括网络和网站服务,数据库连接库,分布式任务队列等等。On their o...

weixin_39982580的博客 1239

aiohttp与aiomultiprocess结合使用

这是之前听大神讲异步的时候看到的一篇教程,后来又查了一些资料,汇总了一下,先记下来,后续用到了再深入研究。

Dahlin哥's 博客 2452

aiomultiprocess 使用教程

`aiomultiprocess` 是一个用于异步多进程处理的Python库,旨在通过结合异步IO(AsyncIO)和多进程处理来提高Python应用程序的并发性能。它允许每个子进程运行一个完整的AsyncIO事件循环,从而实现高级别的并发。 ## 项目快速启动 ### 安装 首先,确保你的Python版本是3.6或更高。然后使用pip安装`aiomultiprocess`: ```bas...

gitblog_00422的博客 649

Python 彻底解读协程与异步【看完包会】

title: Python 协程与异步 copyright: true top: 0 date: 2018-08-11 10:15:50 tags: categories: Python进阶笔记 permalink: password: keywords: 协程 description: Python2.7中用代码实现协程,同时区分同步与异步,以及异步的表现形式,回调与协程。 像烟花也是过一生,...

浪子燕青的博客 4221

多线程-三状态的转换_调度

多线程 多线程是提升程序性能⾮常重要的⼀种⽅式,使⽤多线程可以让程序充分利⽤CPU资源,提⾼CPU的使⽤效率,从⽽到达解决⾼并发所带来的负载均衡的问题。 多线程的优点: 1.CPU资源得到更合理的利⽤。 2.程序响应更快,运⾏效率更⾼ 多线程的缺点: 1.需要更多的内存空间来⽀持多线程。 2.多线程并发访问的情况可能会影响数据的准确性。 3.⼀个资源被多个线程共享时,可能会出现死锁的情况。 重点:线程状态,线程调度,线程同步,高并发与线程池,实战为主。 线程与进程 什么是进程

yyyggyy的博客 700

aiomultiprocess: 高性能异步多进程库教程

```markdown aiomultiprocess/ │ ├── aiomultiprocess # 核心代码包,包含了所有的模块和类定义 │ ├── __init__.py # 包初始化文件,导入核心功能 │ └── ... # 其他相关模块文件 ├── examples # 示例代码目录,展示如...

gitblog_00319的博客 446

Python3多进程multiprocessing模块的使用

一、概念 在使用multiprocessing库实现多进程之前,我们先来了解一下操作系统相关的知识。 Unix/Linux实现多进程 Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊。普通的函数调用,调用一次,返回一次,但是fork()调用一次,返回两次,因为操作系统自动把当前父进程复制了一份子进程,然后,分别在父进程和子进程内返回。 子进程永远返回0,而父进程返回子进程的ID。这样,一个父进程可以fork出很多子进程,所以,父进程要记下每个子进程的ID,而子进程只需要调

清风专栏 1869

Python3并发编程-多进程multiprocessing

Python3中的multiprocess包提供了进程相关操作的类,如Process类等 1:子进程创建 1.1:Process类创建子进程 # -*- coding: utf-8 -*- import os import time from multiprocessing import Process # print(help(Process)) def func(pid): print(f'父进程:', pid) print(f'子进程:',os.getpid())

ixusy88的博客 1132

python多进程-----multiprocessing包

multiprocessing并非是python的一个模块,而是python多进程管理的一个包,在学习的时候可以与threading这个模块作类比,正如我们在上一篇转载的文章中所提,python的多线程并不能做到真正的并行处理,只能完成相对的并发处理,那么我们需要的就是python多进程来完成并行处理,把所有的cpu资源都利用起来。multiprocessing的很大一部分与threading...

weixin_34414196的博客 304

python aiomultiprocess already start问题解决

aiomultiprocess already start问题解决 import aiomultiprocess aiomultiprocess.set_context('spawn')

Ssanii的博客 361

python3 学习笔记 多进程 multiprocessing 模块

多进程 Multiprocessing 模块multiprocessing 模块官方说明文档Process 类Process 类用来描述一个进程对象。创建子进程的时候,只需要传入一个执行函数和函数的参数即可完成 Process 示例的创建。 star() 方法启动进程, join() 方法实现进程间的同步,等待所有进程退出。 close() 用来阻止多余的进程涌入进程池 Pool 造成进程阻塞。 m

热心市民王先生 3万+

多进程、多线程和协程

简书:https://www.jianshu.com/p/1cce7b37b80a CSDN: 一、前言 计算机执行的任务可以分为IO密集型任务和计算任务,计算机的CPU计算是非常快的,而程序常常会因为等待IO而阻塞。比如对网站进行请求时,如果网站的返回速度很慢,而程序一直在等待网站相应,同理进行IO读写操作时,程序也一直在等待。所以,本文就借此聊一下Python中的进程、线程和协程。 关于P...

u012052168的博客 402

python3 多进程multiprocessing 使用简介

引子 前段时间在做的一个Python项目,需要实现一个后台服务程序,程序流程比较复杂,而且可能经常变动,但是如果把整个流程切分成一些步骤,每个步骤有自己的输入输出和处理。只要将他们的输入输出接在一起,进行不同的组合就可以实现常见的流程变动。 使用多进程的原因是考虑到Python的全局解释器锁(Global Interceptor Lock, GIL)。由于GIL的存在,在CPU密集型的程序当中...

whatday的专栏 2364
上一篇: SQLServer自定义Trim函数
下一篇: python3保证多进程运算结果的完整性 keep mutliprocess result integrity
chrisplus
博客等级 码龄19年 13粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值