这是学习Python教程中的一个实例
本文记录了该多进程实例的完整程序,希望其他人也可以学习到其中的知识,非常简单,有什么想法欢迎评论!
- 该实例由两部分组成:
- -任务分发端
- -任务处理端
- 测试时,先启动任务分发端,再启动任务处理端
- 注意:本程序是在mac环境中测试运行的;在windows上运行会有问题,请注意!
- 解决方法:需要参考网上其他人的解决方案:①lambda不支持,增加两个方法,返回队列②在if __name__ == “__main__”中引入freeze_support()
第一部分:任务分发端
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 17/9/17 上午10:49
# @Author : mylovin
# @File : MultiProcess_Server.py
# @Software: PyCharm
# @说明 : 多进程实例----分发任务端
#导入必备头文件;
import multiprocessing
from multiprocessing.managers import BaseManager
import Queue#注意:python2.7中,Queue是大写;但是python3中是小写!
#继承BaseManager类
class QueueManager(BaseManager):
pass
#创建任务队列和结果队列
get_task_queue = Queue.Queue()
get_result_queue = Queue.Queue()
#在网络上注册
QueueManager.register("get_task_queue", callable=lambda :get_task_queue)
QueueManager.register("get_result_queue", callable=lambda :get_result_queue)
#创建多进程管理员,需要指定地址和端口,用于主从之间连接,同时需要验证码进行验证
manager = QueueManager(address=("127.0.0.1", 5000), authkey=b"multiprocessing")
#启动
manager.start()
#获取任务队列和结果队列
task = manager.get_task_queue()
result = manager.get_result_queue()
for i in range(10):
task.put(i)
for i in range(10):
v = result.get(timeout=5)
print(v)
#结束
manager.shutdown()
第二部分:任务处理端
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 17/9/17 上午10:49
# @Author : mylovin
# @File : MultiProcess_Worker.py
# @Software: PyCharm
# @说明 : 多进程实例----执行任务端
import multiprocessing
import Queue
from multiprocessing.managers import BaseManager
class QueueManager(BaseManager):
pass
QueueManager.register("get_task_queue")
QueueManager.register("get_result_queue")
manager = QueueManager(address=("127.0.0.1", 5000), authkey=b"multiprocessing")
manager.connect()
task = manager.get_task_queue()
result = manager.get_result_queue()
for i in range(10):
value = task.get(timeout=2)
result.put(value*value)
该实例比较简单,很多内容并没有详细分析,具体的大家可以去廖雪峰大神的网站上面去学习!
欢迎大家评论!