没有合适的资源?快使用搜索试试~ 我知道了~
Python利用multiprocessing实现最简单的分布式作业调度系统实例
1 下载量 36 浏览量
2020-12-25
10:43:14
上传
评论
收藏 94KB PDF 举报
温馨提示
介绍 Python的multiprocessing模块不但支持多进程,其中managers子模块还支持把多进程分布到多台机器上。一个服务进程可以作为调度者,将任务分布到其他多个机器的多个进程中,依靠网络通信。想到这,就在想是不是可以使用此模块来实现一个简单的作业调度系统。在这之前,我们先来详细了解下python中的多进程管理包multiprocessing。 multiprocessing.Process multiprocessing包是Python中的多进程管理包。它与 threading.Thread类似,可以利用multiprocessing.Process对象来创建一个进程。该进程可
资源推荐
资源详情
资源评论





















格式:pdf 资源大小:58.5KB 页数:3






Python利用利用multiprocessing实现最简单的分布式作业调度系实现最简单的分布式作业调度系
统实例统实例
介绍介绍
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类的构造方法:类的构造方法:
__init__(self, group=None, target=None, name=None, args=(), kwargs={})
参数说明:参数说明:
group:进程所属组。基本不用
target:表示调用对象。
args:表示调用对象的位置参数元组。
name:别名
kwargs:表示调用对象的字典。
创建进程的简单实例:创建进程的简单实例:
#coding=utf-8
import multiprocessing
def do(n) :
#获取当前线程的名字
name = multiprocessing.current_process().name
print name,'starting'
print "worker ", n
return
if __name__ == '__main__' :
numList = [] for i in xrange(5) :
p = multiprocessing.Process(target=do, args=(i,))
numList.append(p)
p.start()
p.join()
print "Process end."
执行结果:执行结果:
Process-1 starting
worker 0
Process end.
Process-2 starting
worker 1
Process end.
Process-3 starting
worker 2
Process end.
Process-4 starting
worker 3
Process end.
Process-5 starting
worker 4

Process end.
创建子进程时,只需要传入一个执行函数和函数的参数,创建一个Process实例,并用其start()方法启动,join()方法表示等待
子进程结束以后再继续往下运行,通常用于进程间的同步。
注意:注意:
在Windows上要想使用进程模块,就必须把有关进程的代码写在当前.py文件的if __name__ == ‘__main__' :语句的下面,才能正常
使用Windows下的进程模块。Unix/Linux下则不需要。
multiprocess.Pool
当被操作对象数目不大时,可以直接利用multiprocessing中的Process动态成生多个进程,十几个还好,但如果是上百个,上
千个目标,手动的去限制进程数量却又太过繁琐,此时可以发挥进程池的功效。
Pool可以提供指定数量的进程供用户调用,当有新的请求提交到pool中时,如果池还没有满,那么就会创建一个新的进程用来
执行该请求;但如果池中的进程数已经达到规定最大值,那么该请求就会等待,直到池中有进程结束,才会创建新的进程来
它。
apply_async和和apply
函数原型:
apply_async(func[, args=()[, kwds={}[, callback=None]]])
二者都是向进程池中添加新的进程,不同的时,apply每次添加新的进程时,主进程和新的进程会并行执行,但是主进程会阻
塞,直到新进程的函数执行结束。 这是很低效的,所以python3.x之后不再使用
apply_async和apply功能相同,但是主进程不会阻塞。
# -*- coding:utf-8 -*-
import multiprocessing
import time
def func(msg):
print "*msg: ", msg
time.sleep(3)
print "*end"
if __name__ == "__main__":
# 维持执行的进程总数为processes,当一个进程执行完毕后会添加新的进程进去
pool = multiprocessing.Pool(processes=3)
for i in range(10):
msg = "hello [{}]".format(i)
# pool.apply(func, (msg,))
pool.apply_async(func, (msg,)) # 异步开启进程, 非阻塞型, 能够向池中添加进程而不等待其执行完毕就能再次执行循环
print "--" * 10
pool.close() # 关闭pool, 则不会有新的进程添加进去
pool.join() # 必须在join之前close, 然后join等待pool中所有的线程执行完毕
print "All process done."
运行结果:
"D:\Program Files\Anaconda2\python.exe" E:/pycharm/test/multiprocessing/v1.py
--------------------
*msg: hello [0] *msg: hello [1] *msg: hello [2] *end
*msg: hello [3] *end
*end
*msg: hello [4] *msg: hello [5] *end
*msg: hello [6] *end
*end
*msg: hello [7] *msg: hello [8] *end
*msg: hello [9] *end*end
*end
All process done.
Process finished with exit code 0
剩余7页未读,继续阅读
资源评论


weixin_38744803
- 粉丝: 3
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 基于单片机的温度控制系统的方案设计书13706.doc
- [开题报告]花园水电站泄水表孔工作闸门设计.docx
- 医药企业信息化实施与建设.doc
- 公寓样板间室内设计合同.doc
- 集控楼工程-第一分册结构施工.doc
- 某钢铁厂桥式起重机试运转方案.doc
- 试探讨云计算下的新型跟踪审计模式.docx
- STM32L4通用输入输出模块(GPIO)介绍.pdf
- 互联网+教育背景下初中课堂教学策略.docx
- 【STM32U5线上课程】STM32U5 online training_44_Parallel synchronous
- 安全技术交底记录行灯使用安全技术交底--.doc
- 某项目铝合金门窗钢副框安装施工技术交底.doc
- 珠海某楼电梯工程招标文件.doc
- 【STM32信息安全线上课程】Security online training_5.1.2_STM32MCU Memor
- 保温上人屋面施工方案.docx
- STM32L4高级加密标准模块(AES)介绍.pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
