Python【Windows】进程池

Windows下Python创建进程池的问题 原文地址:https://www.jeremyjone.com/420/ , 转载请注明 很久没有用到进程池,今天公司项目需要大量进程,考虑使用进程池操作。其实很简单,几行代码就可以搞定,但是遇到了一个比较有意思的问题。之前写Python都是在Linux上,没有出现过,今天发现Windows上还是有一些区别。 我以为很简单,导包,创建,使用,结束。五行搞定。 from multiprocessin... 阅读详情

multiprocessing.Pool

from multiprocessing import Pool
# 执行函数
def func(i):
    from time import sleep
    print('i')
    sleep(1)
    print(i)
    sleep(1)
# 多进程
def mult(func, n):
    # 1.创建进程池,放入适量进程
    pool = Pool(processes=n)
    # 2、将事件加入进程池,进程池自动地处理事件
    for i in range(n):
        pool.apply_async(func, (i,))
    # 3、关闭进程池接口
    pool.close()
    # 4、主程序阻塞等待,所有事件完成后,回收进程池
    pool.join()
# 运行
if __name__ == '__main__':
    mult(func, 4)

multiprocessing.Process

from multiprocessing import Process
# 执行函数
def func(i):
    from time import sleep
    print(i)
    sleep(1)
    print('i')
    sleep(1)
# 多进程
def mult(funct, step):
    pool = []  # 进程池
    for offset in range(step):
        p = Process(target=funct, args=(offset,))
        pool.append(p)
    for p in pool:
        p.start()
    for p in pool:
        p.join()
# 运行
if __name__ == '__main__':
    mult(func, 4)

共享内存

共享数值

from multiprocessing import Pool, Manager
from time import sleep

def f(share, i):
    sleep(i)
    share.value += i
    print('step%d:' % i, share)

def mult():
    share = Manager().Value('d', 0)
    functions = [f, f, f, f]
    pool = Pool(processes=len(functions))
    for i in range(len(functions)):
        pool.apply_async(functions[i], (share, i))
    pool.close()
    pool.join()
    print('final:', share)

if __name__ == '__main__':
    mult()

共享数组

from multiprocessing import Pool, Manager
from time import sleep

def f1(share, i):
    sleep(i)
    print('step%d:' % i, share)
    share[i] = 3 - i

def f2(share, i):
    sleep(i)
    print('step%d:' % i, share)
    share[i] = 3 - i

def f3(share, i):
    sleep(i)
    print('step%d:' % i, share)
    share[i] = 3 - i

def mult():
    share = Manager().Array('d', [0, 0, 0])
    functions = [f1, f2, f3]
    pool = Pool(processes=3)
    for i in range(3):
        pool.apply_async(functions[i], (share, i))
    pool.close()
    pool.join()
    print('final:', share)

if __name__ == '__main__':
    mult()

比较Pool、Process、Thread

def multiprocess(functions):
    from multiprocessing import Pool
    pool = Pool(processes=len(functions))
    for f in functions:
        pool.apply_async(f)
    pool.close()
    pool.join()

def multiprocess(functions):
    from multiprocessing import Process
    pool = [Process(target=f) for f in functions]
    for p in pool:
        p.start()
    for p in pool:
        p.join()

def multithreading(functions):
    from threading import Thread
    pool = [Thread(target=f) for f in functions]
    for p in pool:
        p.start()
    for p in pool:
        p.join()

def ff():
    print(1)
    from time import sleep
    sleep(1)
    print(2)

multithreading([ff, ff])
  • Pool跳过错误且不打印任何东西,而Process报错
  • lambda放入多进程会出错
  • Windows下使用多进程要加if __name__ == '__main__'
windows下Python使用多进程的问题 最近在学习爬虫,对于线程、进程、多线程、多进程、协程研究了很多。因为我用的是WIN7,所以一切都是在win下实现的。 在WIN下使用多进程的包multiprocessing(这是第三方包,不是模块),它有几个类:Process要在终端下运行,IDLE运行不了; 同样的Pool(进程池)的map函数和Process一样要在终端运行。但奇怪的是Pool 的apply_async(异步执行)却可以在 阅读详情

相关推荐

python 线程池,进程池

网上关于python 的线程池,进程池相关的资料较少,很多都是参考官方例子的代码。我们这篇文章就给出一些基于计算机视觉的代码实例。实际上GIL 限制了线程池的使用场景,但是从发展的眼光看,使用线程池是非常必要的。尤其是正儿八经的生产系统。可以使用3种方法避免全局锁的限制: 多进程,cython,使用非CPython解释器。

shiter编写程序的艺术 445

python进程池win出错_解决windows下python3使用multiprocessing.Pool出现的问题

例如:from multiprocessing import Pooldef f(x):return x*xpool = Pool(processes=4)r=pool.map(f, range(100))pool.close()pool.join()在spyder里运行直接没反应;在shell窗口里,直接报错,如下:Process SpawnPoolWorker-15:Traceback (mo...

weixin_39801613的博客 1803

解决windows下python3使用multiprocessing.Pool出现的问题

主要介绍了解决windows下python3使用multiprocessing.Pool出现的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

Python学习笔记之进程池pool

Pool类可以提供指定数量的进程供用户调用,当有新的请求提交到Pool中时,如果池还没有满,就会创建一个新的进程来执行请求。如果池满,请求就会告知先等待,直到池中有进程结束,才会创建新的进程来执行这些请求。

json_li的博客 5885

QuestaSim使用Xilinx库的设置

安装QuestaSim

miracle_eicont的专栏 3410

Unity获取透明物体深度数据

Unity获取透明物体深度数据前言透明&景深需求模型透明度部分带透明通道图片/视频部分半透明模型获取深度的具体实现方法带透明度图片/视频获取深度的具体实现方法结束语 前言 最近在做的项目有很多奇怪的需求,甚至之前在unity里用插件写了一个类似于蓝图的行为树插件,之后有时间给大家讲一讲相关的实现方法,今天刚解决了unity里透明物体无法获得深度数据的问题。所以分享给大家。 透明&景...

可以吃的妙脆角的博客 2632

python 进程池详解

在利用Python进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间。当被操作对象数目不大时,可以直接利用multiprocessing中的Process动态成生多个进程,十几个还好,但如果是上百个,上千个目标,手动的去限制进程数量却又太过繁琐,此时可以发挥进程池的功效。 Pool可以提供指定数量的进程供用户调用,当有新的请求提交到pool中时,如果池...

程序员小陶的大数据分享 1475

硬全桥副边钳位管Vds电压凸台揭秘——寄生参数引发的导通异常

本文深入分析了硬全桥副边钳位管Vds电压凸台现象,揭示了寄生参数如何引发导通异常。通过波形分析和工程实践,详细解析了走线电感的蓄能效应和体二极管的接力作用,并提供了PCB布局优化、元件选型和驱动电路调整等解决方案,帮助工程师有效应对这一常见问题。

weixin_30825581的博客 430

Python线程池、进程池的介绍与使用

 最近在做的一个项目是用python同时给多个用户提供科学计算。为了最大化并行服务的用户数量,需要用到多进程;为了最大化多个用户使用的公平性,需要用到多线程。

m0_50596083的博客 5245

ChatBI告别“NL2SQL依赖症”!从准确率50%到90%,3大技术路线+4个企业案例拆解核心玩法

摘要: ChatBI通过自然语言交互实现数据民主化,其核心是“语义理解+数据执行+知识沉淀”的全链路能力,而非单一的NL2SQL技术。行业采用三大技术路线提升准确率:专有知识库(提升30%)、指标标签语义层(准确率85%)、JSON中间层(多轮对话提升25%)。数据执行方案包括NL2SQL、NL2API等,需结合场景选择。企业落地需解决四大痛点:跨表查询准确率低(引入拓扑图)、模糊查询(用户干预机制)、响应慢(预计算缓存)、多轮对话(上下文池)。Spring AI Alibaba提供轻量级集成方案,助力企业

weixin_52610848的博客 1656

基于MATLAB Simulink的电动汽车整车控制仿真

在本文中,我们选择了power_ElectricVehicle示例模型,该模型已经包含了电动汽车的基本组成部分,包括电机、变速器、驱动轮、电池等。例如,使用PID控制器来控制电机的转速,使用ABS控制器来控制车轮的制动力,使用转向控制器来控制车辆的转向角度,使用悬挂控制器来控制车轮的姿态等。通过建立模型和实现控制器,我们可以比较直观地了解电动汽车的工作原理和性能特点,并验证设计的控制系统在不同工况下的效果。而在电动汽车的开发中,整车控制系统是至关重要的一个组成部分,直接影响着电动汽车的性能和性价比。

qq_39605374的博客 1806

python进程池win出错_Windows下Python创建进程池的问题

很久没有用到进程池,今天公司项目需要大量进程,考虑使用进程池操作。其实很简单,几行代码就可以搞定,但是遇到了一个比较有意思的问题。之前写Python都是在Linux上,没有出现过,今天发现Windows上还是有一些区别。我以为很简单,导包,创建,使用,结束。五行搞定。from multiprocessing import Poolpool = mp.Pool(processes=mp.cpu_co...

weixin_39834090的博客 405

ESP32-C3入门教程 环境篇③——VS Code IDE快速入门

文章目录一、安装Visual Studio Code二、安装扩展三、配置ESP-IDF 插件四、创建工程五、配置工程5.1 选择目标芯片5.2 项目配置六、编译工程七、固件分析七、固件下载八、串口日志九、单步调试 一、安装Visual Studio Code 下载并安装Visual Studio Code 二、安装扩展 左侧扩展 搜索espressif 点击安装 三、配置ESP-IDF 插件 按下F1按键 输入configure esp-idf extension EXPRESS,如果你

8306

Python中的进程池与线程池

进程池和线程池在 Python 中均有其独特的应用场景,根据任务的具体需求选择适当的池类型十分重要。CPU密集型任务更适合使用进程池,而I/O密集型任务则更适合线程池的方式。在 Windows 操作系统中,优先选择线程池处理任务以确保程序的执行效率和稳定性。在需要多任务并行且又需共享数据的应用场景中,线程池提供了一种有效的解决方案,虽然保护数据的同步开销不可忽视。通过适当的实现和异常处理机制,您可以构建更高效、更稳定的并发应用程序,从而充分发挥多核处理器的潜力和网络通信能力。

python探索 1199

具身智能:原理、算法与系统 第3章 具身智能的感知-认知-行为框架

具身智能的PCB框架源于对生物智能系统的观察:动物通过感官接收环境信息(感知),基于内部模型进行预测和决策(认知),并通过身体执行动作改变环境(行为),而这一改变又通过感知反馈形成闭环。这一框架在两篇核心文献中得到了深入阐述:提出了系统的数学形式化和工程实现,则从认知科学角度强调了归纳偏置和双过程理论的重要性。

VectorShift的博客 156

Freeswitch DTMF 按键无法接收问题修复

freeswitch 在接收到 update后,会更新成新的 payload type,但是给的200响应,仍然是旧的,这时候就会导致手机侧认识需要发送旧的payload,所以发到 fs 后就会导致直接丢包,不去处理RTP包了。呼叫时需要设置通道变量 rtp_manual_rtp_bugs=ACCEPT_ANY_PAYLOAD ,这时候FS 就不会对包的payload进行判断,直接判定通过。应该修复 freeswitch 给响应时,应该根据收到的 payload 发送给手机,但是一直未找到正确的路径。

2301_81507069的博客 374

python语言windows进程池中的Queue消息队列,进程通信

用进程池建立两个进程,实现进程间互相接收发送消息。 如果要使用Pool创建进程,就需要使用multiprocessing.Manager()中的Queue(),而不是multiprocessing.Queue(),否则会得到一条如下的错误信息: RuntimeError: Queue objects should only be shared between processes through...

qq_36045385伟哥的博客 1076

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Python进程池Pool

Python进程池Pool 最近做了一个demo,用到了进程池,要提升速率,但是打包成exe之后程序直接卡死了。 网上搜索之后发现在Win系统下要加freeze_support()这么一段代码 if __name__ == '__main__': while True: try: freeze_support() nu...

123的博客 413

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

进程池的练习

#encoding = utf-8 #进程池类似线程中的信号量(像银行排队叫号一样),进程池内部维护一个进程序列,当使用时则在进程池中获取一个。 #获取时,如果没有可用进程,程序需要等待,知道有可用进程。 #进程池中有两种,一种叫apply(并行执行),一种叫apply_async(串行执行) #本代码主要包含三部分:主进程、子进程(sub_process)、回调函数(call_back) fro...

qq_44801116的博客 198

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

multiprocessing — Process-based parallelism python 多进程 用法 进程池

https://docs.python.org/3/library/multiprocessing.html 1 背景 python由于Global Interpreter Lock 的原因,多线程并不是我们想的那种CPU调度的多线程,在python中开了多线程其实也是一个单进程。 针对CPU密集型(CPU-bound)的任务,比如计算气象数据,多线程和多进程调用多个CPU核心并行,能有效减少任务计算时间,提高实时性,但python的多线程是不ok的。 针对IO密集型(I/O bound)的任务,比如爬虫,

q742971636的博客 343

python进程池如何重复利用_Python多进程、进程池和内存碎片消息队列,记忆,之,python...

# 多进程import osfrom multiprocessing import Process, current_process# Process([group[, target[, name[, args[, kwargs]]]]])# group分组,实际上不怎么使用# target表示调用对象,传入任务执行函数做为参数,注意是函数名,不带括号# args表示给调用对象以元组的形式提供 参...

weixin_35815766的博客 398

进程池

启动太多个进程,会使系统运行快速变慢,因为相当于克隆了父进程数据,使内存资源开销变大,容易将系统搞瘫。(多线程开销很下,只是使cpu的切换过于频繁,导致系统变慢) 进程池(同一时间有多少进程在CPU上运行)   进程池内部维护一个进程序列,当使用时,则去进程池中获取一个进程,如果进程池序列中没有可供使用的进进程,那么程序就会等待,直到进程池中有可用进程为止。 进程池中有两个方法: ap...

weixin_30650859的博客 96

python进程池map_python 进程池pool简单使用

平常会经常用到多进程,可以用进程池pool来进行自动控制进程,下面介绍一下pool的简单使用。需要主动是,在Windows上要想使用进程模块,就必须把有关进程的代码写if __name__ == ‘__main__’ :语句的下面,才能正常使用Windows下的进程模块。Unix/Linux下则不需要。Pool类Pool类可以提供指定数量的进程供用户调用,当有新的请求提交到Pool中时,如果池还没...

weixin_39629467的博客 396

进程池pool

使用情况 当需要的进程不多时,可以使用multiprocessing 中的process动态生成多个进程, 如果需要的进程数量过于庞大,则使用 multiprocessing 中提供的 pool 方法。 初始化进程池时。可以指定一个最大进程值,当有新的进程请求被提交时,如果进程池还没有满,则会创建一个新的进程池执行该请求,但如果进程池中的进程已达到最大值,则该请求加入等待队列,当有进程被执行结束时...

jiahuiquan的博客 221

Python第三部分进阶6-多进程multiprocessing|进程池Pool|队列Queue

第一部分 进程: ##################################### 1.**多进程** ##################################### ·程序: 是一个指令的集合 ·进程: 正在执行的程序;或者说:当你运行一个程序,你就启动了一个进程     - 编写完的代码,没有运行时,称为程序,正在运行的代码,称为进程     - 程序是死的(静态的),进程是活的(动态的) ·操作系统轮流让各个任务交替执

qq_36849630的博客 465
上一篇: sklearn各聚类算法比较
下一篇: Python全国就业分布
小基基o_O
博客等级 码龄9年 4414粉丝 467原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值