位置: 编程技术 - 正文

Python利用multiprocessing实现最简单的分布式作业调度系统实例(python利用for循环求1到100的和)

发布时间:2024-02-27

推荐整理分享Python利用multiprocessing实现最简单的分布式作业调度系统实例(python利用for循环求1到100的和),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python利用数据输出表格,python利用数据文件统计成绩,python利用range产生列表,python利用数据输出表格,python利用for循环求1到100的和,python利用数据输出表格,python利用while循环求1+2+3......+n的和,python利用数据文件统计成绩,内容如对您有帮助,希望把文章链接给更多的朋友!

介绍

Python的multiprocessing模块不但支持多进程,其中managers子模块还支持把多进程分布到多台机器上。一个服务进程可以作为调度者,将任务分布到其他多个机器的多个进程中,依靠网络通信。想到这,就在想是不是可以使用此模块来实现一个简单的作业调度系统。在这之前,我们先来详细了解下python中的多进程管理包multiprocessing。

multiprocessing.Process

multiprocessing包是Python中的多进程管理包。它与 threading.Thread类似,可以利用multiprocessing.Process对象来创建一个进程。该进程可以允许放在Python程序内部编写的函数中。该Process对象与Thread对象的用法相同,拥有is_alive()、join([timeout])、run()、start()、terminate()等方法。属性有:authkey、daemon(要通过start()设置)、exitcode(进程在运行时为None、如果为?N,表示被信号N结束)、name、pid。此外multiprocessing包中也有Lock/Event/Semaphore/Condition类,用来同步进程,其用法也与threading包中的同名类一样。multiprocessing的很大一部份与threading使用同一套API,只不过换到了多进程的情境。

这个模块表示像线程一样管理进程,这个是multiprocessing的核心,它与threading很相似,对多核CPU的利用率会比threading好的多。

看一下Process类的构造方法:

参数说明:

group:进程所属组。基本不用 target:表示调用对象。 args:表示调用对象的位置参数元组。 name:别名 kwargs:表示调用对象的字典。

创建进程的简单实例:

执行结果:

创建子进程时,只需要传入一个执行函数和函数的参数,创建一个Process实例,并用其start()方法启动,join()方法表示等待子进程结束以后再继续往下运行,通常用于进程间的同步。

注意:

在Windows上要想使用进程模块,就必须把有关进程的代码写在当前.py文件的if __name__ == ‘__main__' :语句的下面,才能正常使用Windows下的进程模块。Unix/Linux下则不需要。

multiprocess.Pool

当被操作对象数目不大时,可以直接利用multiprocessing中的Process动态成生多个进程,十几个还好,但如果是上百个,上千个目标,手动的去限制进程数量却又太过繁琐,此时可以发挥进程池的功效。

Pool可以提供指定数量的进程供用户调用,当有新的请求提交到pool中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求;但如果池中的进程数已经达到规定最大值,那么该请求就会等待,直到池中有进程结束,才会创建新的进程来它。

apply_async和apply

函数原型:

二者都是向进程池中添加新的进程,不同的时,apply每次添加新的进程时,主进程和新的进程会并行执行,但是主进程会阻塞,直到新进程的函数执行结束。 这是很低效的,所以python3.x之后不再使用

apply_async和apply功能相同,但是主进程不会阻塞。

运行结果:

获得进程的执行结果

结果:

map

函数原型:

Python利用multiprocessing实现最简单的分布式作业调度系统实例(python利用for循环求1到100的和)

Pool类中的map方法,与内置的map函数用法行为基本一致,它会使进程阻塞直到返回结果。

注意,虽然第二个参数是一个迭代器,但在实际使用中,必须在整个队列都就绪后,程序才会运行子进程。

执行结果:

注意:执行结果中“—-”的位置,可以看到,map之后,主进程是阻塞的,等待map的结果返回

close()

关闭进程池(pool),使其不在接受新的任务。

terminate()

结束工作进程,不在处理未处理的任务。

join()

主进程阻塞等待子进程的退出,join方法必须在close或terminate之后使用。

进程间通信

多进程最麻烦的地方就是进程间通信,IPC比线程通信要难处理的多,所以留作单独一篇来记录

利用multiprocessing实现一个最简单的分布式作业调度系统

Job

首先创建一个Job类,为了测试简单,只包含一个job id属性,将来可以封装一些作业状态,作业命令,执行用户等属性。

job.py

Master

Master用来派发作业和显示运行完成的作业信息

master.py

Slave

Slave用来运行master派发的作业并将结果返回

slave.py

测试

分别打开三个linux终端,第一个终端运行master,第二个和第三个终端用了运行slave,运行结果如下

master

slave1

slave2

总结

标签: python利用for循环求1到100的和

本文链接地址:https://www.jiuchutong.com/biancheng/372245.html 转载请保留说明!

上一篇:python中os和sys模块的区别与常用方法总结(python必学的os模块详解)

下一篇:Python基础语言学习笔记总结(精华)(python语言基础与应用答案)

  • 读懂增值税
  • 个人所得税财产租赁所得税率表
  • 高速公路费如何冲抵
  • 做账一定要银行对账单吗
  • 押金收不回来没钱怎么办
  • 个体户定额交税还用交个税吗
  • 企业资产重组是不定期清查吗
  • 哪些银行承兑汇票不能收的名单
  • 固定资产超过注册资金怎么处理
  • 买赠销售方式的税务筹划
  • 承兑多付了退现金网银备注什么
  • 出租车公司给车都上什么保险
  • 从支付宝里可以查出结婚个人信息吗
  • 退休人员返聘工资交个人所得税标准
  • 承接所有业务
  • 固定资产清理营业外收入交增值税吗
  • 小规模纳税人可以开9%专票吗
  • 发票申请需要多久
  • 发票密码区出来了一点
  • 公司为职工缴纳的医保不计入账户吗
  • 开办费摊销时间税法规定
  • 坏账收回的账务处理方法
  • 销售净利率计算公式是什么
  • 没进项发票要交多少税
  • 金税盘发票报送状态未报送
  • 海关增值税当月可以抵扣吗
  • 外币财务报表折算未分配利润采用什么汇率
  • mac如何重装系统win10
  • 计提个人社保会计分录实操
  • windows11iso镜像多久更新一次
  • 电脑任务栏消失怎么把它显示出来
  • linux怎样使用
  • 营业利润是怎么计算的?
  • 长期借款的账务处理怎么做分录
  • wordpress项目开发
  • 金融企业财务规则(征求意见稿)
  • php怎么设置管理员权限
  • laravel 5.3中自定义加密服务的方案详解
  • 用php制作日历2020日历表
  • 应付职工薪酬会产生暂时性差异吗
  • 固定资产以前年度未入账怎么处理
  • php 通信
  • 特斯拉适用于什么车型
  • python编程100例
  • vue.js过滤器
  • 学生誓词最新2022年
  • 销售产品的包装费
  • 电子承兑汇票到期提示付款后多久到账
  • 购买办公用品没有合同缴纳印花税吗
  • 企业的生产成本包括哪些
  • 印花税减征比例
  • 费用结转的方法有哪些
  • 定期定额征收税款
  • 差旅费适用税率
  • 开票内容不在经营范围内
  • 进口环节缴纳关税计入什么科目
  • 企业微信开通微信支付
  • 应收账款的注意要点
  • 公司没有车油费可以报销吗
  • 酒店租金计入什么会计科目
  • 跨月的发票开错了该怎么办?
  • 给公司股东分红的账务处理
  • 明细账的设置与登记
  • 基于存储过程的计算
  • mysql与c++相连
  • 微软2016是window多少
  • win7修改系统版本
  • Mac怎么查看WiFi使用量
  • linux cp 不是目录
  • linux groupmod命令参数及用法详解(linux修改组信息命令)
  • 用python写网页
  • 网站备份工具
  • jquery的checked
  • 电脑完美平台
  • 防止重复调用接口
  • jquery遍历object
  • 如何修改新建的内容
  • 安装配置jsp运行环境
  • 税务纪检部门
  • 别人用你的收款码能骗到钱吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号