分布式进程 master and task 实例
来源:互联网 发布:歌词改编软件 编辑:程序博客网 时间:2024/06/07 01:47
要实现多任务,通常我们会设计 Master-Worker 模式,Master 负 责分配任务,Worker 负责执行任务,因此,多任务环境下,通常是一 个 Master,多个 Worker。
Master
#task_master.py#!/usr/bin/env python3# -*- coding: utf-8 -*-import random, time, queuefrom multiprocessing.managers import BaseManager# 发送任务的队列:task_queue = queue.Queue()# 接收结果的队列:result_queue = queue.Queue()# 从BaseManager继承的QueueManager:class QueueManager(BaseManager): pass# 把两个Queue都注册到网络上, callable参数关联了Queue对象:QueueManager.register('get_task_queue', callable=lambda: task_queue)QueueManager.register('get_result_queue', callable=lambda: result_queue)# 绑定端口5000, 设置验证码'abc':manager = QueueManager(address=('', 5000), authkey=b'abc')# 启动Queue:manager.start()# 获得通过网络访问的Queue对象:task = manager.get_task_queue()result = manager.get_result_queue()# 放几个任务进去:for i in range(10): n = random.randint(0, 10000) print('Put task %d...' % n) task.put(n)# 从result队列读取结果:print('Try get results...')for i in range(10): r = result.get(timeout=10) print('Result: %s' % r)# 关闭:manager.shutdown()print('master exit.')
Worker
#!/usr/bin/env python3# -*- coding: utf-8 -*-import time, sys, queuefrom multiprocessing.managers import BaseManager# 创建类似的QueueManager:class QueueManager(BaseManager): pass# 由于这个QueueManager只从网络上获取Queue,所以注册时只提供名字:QueueManager.register('get_task_queue')QueueManager.register('get_result_queue')# 连接到服务器,也就是运行task_master.py的机器:server_addr = '127.0.0.1' #如果在同一台机器测试,则令#server_addr = ''print('Connect to server %s...' % server_addr)# 端口和验证码注意保持与task_master.py设置的完全一致:m = QueueManager(address=(server_addr, 5000), authkey=b'abc')# 从网络连接:m.connect()# 获取Queue的对象:task = m.get_task_queue()result = m.get_result_queue()# 从task队列取任务,并把结果写入result队列:for i in range(10): try: n = task.get(timeout=1) print('run task %d * %d...' % (n, n)) r = '%d * %d = %d' % (n, n, n*n) time.sleep(1) result.put(r) except Queue.Empty: print('task queue is empty.')# 处理结束:print('worker exit.')
参考自廖雪峰老师的python3 textbook.
https://github.com/michaelliao/learn-python3/tree/master/samples/multitask
阅读全文
0 0
- 分布式进程 master and task 实例
- Python基础-分布式进程 Master/Worker模型
- 分布式文件系统moosefs --master
- apk,task,进程区别
- apk,task,进程区别
- springside4-master访问/task报500错误
- Master and Skin
- HDU5900-QSC and Master
- hdu5900 QSC and Master
- QSC and Master
- HDU5900-QSC and Master
- QSC and Master
- Redis master and slave
- 分布式进程
- 分布式进程
- 分布式进程
- Attractiveness and task execution
- Activity Affinity and task
- CTS 测试细节
- 什么是JavaConfig
- #pragma once 与 #ifndef 解析
- 34. Search for a Range
- Failed to Sync Gradle, could not find com.android.support:support-annotations:23.3.0
- 分布式进程 master and task 实例
- 引用计数算法
- 正则表达式
- sleep() wait() yield() join()用法与区别
- Python基础(一):变量,注释,if-else,关键字
- Windows 下编译ncnn的android端的库
- io学习:2.细说缓存区
- SVG画箭头;文本旋转;文本沿线路径走
- 268. Missing Number