应用分布式进程来进行主机的连接
服务端:
import random
from queue import Queue
# BaseManager: 提供了不同机器之间共享数据的一种方法(ip:port)
from multiprocessing.managers import BaseManager# 1. 创建存储任务需要的队列
task_queue = Queue()# 2. 存储任务执行结果的队列
result_queue = Queue()# 3. 将队列注册到网上(使得其他主机也可以访问)
BaseManager.register('get_task_queue', callable=lambda : task_queue)
BaseManager.register('get_result_queue', callable=lambda : result_queue)# 绑定ip和端口, 并且来个暗号;
manager = BaseManager(address=('172.25.76.250', 4001), authkey=b'westos')# 4. 启动manager对象, 开始共享队列
manager.start()
# 5. 通过网络访问共享的Queue对象;
# BaseManager.register会注册一个方法, 当调用方法时, 执行函数lambda : task_queue;
task = manager.get_task_queue()
result = manager.get_result_queue()# 6. 往队列里面放执行任务需要的数据;
for i in range(1000):# 模拟有1000个数字;n = random.randint(1, 100)task.put(n)print("任务列表中加入任务: %d" %(n))# 7. 从result队列中读取各个机器中任务执行的结果;
for i in range(10):res = result.get()print("队列任务执行的result: %s" %(res))# 8. 关闭manager对象, 取消共享的队列
manager.shutdown()
客户端一:
import time
from multiprocessing.managers import BaseManager# 1. 连接Master端, 获取共享的队列;ip是master端的ip, port'也是master端manager进程绑定的端口;
slave = BaseManager(address=('172.25.76.250', 4001), authkey=b'westos')# 2. 注册队列, 获取共享的队列内容;
BaseManager.register('get_task_queue')
BaseManager.register('get_result_queue')# 3. 连接master端;
slave.connect()# 4. 通过网络访问共享的队列;
task = slave.get_task_queue()
result = slave.get_result_queue()# 5. 读取管理端共享的任务, 并依次执行;
for i in range(500):n = task.get()print("slave1 运行任务 %d ** 2: " % (n))res = "slave1: %d ** 2 = %d" % (n, n ** 2)time.sleep(1)# 将任务的运行结果放入队列中;result.put(res)print("执行结束........")
客户端二:
import time
from multiprocessing.managers import BaseManager# 1. 连接Master端, 获取共享的队列;ip是master端的ip, port'也是master端manager进程绑定的端口;
slave = BaseManager(address=('172.25.76.250', 4001), authkey=b'westos')# 2. 注册队列, 获取共享的队列内容;
BaseManager.register('get_task_queue')
BaseManager.register('get_result_queue')# 3. 连接master端;
slave.connect()# 4. 通过网络访问共享的队列;
task = slave.get_task_queue()
result = slave.get_result_queue()# 5. 读取管理端共享的任务, 并依次执行;
for i in range(500):n = task.get()print("slave2: 运行任务 %d ** 2: " % (n))res = "slave2: %d ** 2 = %d" % (n, n ** 2)time.sleep(1)# 将任务的运行结果放入队列中;result.put(res)print("执行结束........")
应用分布式进程来进行主机的连接
服务端:
import random
from queue import Queue
# BaseManager: 提供了不同机器之间共享数据的一种方法(ip:port)
from multiprocessing.managers import BaseManager# 1. 创建存储任务需要的队列
task_queue = Queue()# 2. 存储任务执行结果的队列
result_queue = Queue()# 3. 将队列注册到网上(使得其他主机也可以访问)
BaseManager.register('get_task_queue', callable=lambda : task_queue)
BaseManager.register('get_result_queue', callable=lambda : result_queue)# 绑定ip和端口, 并且来个暗号;
manager = BaseManager(address=('172.25.76.250', 4001), authkey=b'westos')# 4. 启动manager对象, 开始共享队列
manager.start()
# 5. 通过网络访问共享的Queue对象;
# BaseManager.register会注册一个方法, 当调用方法时, 执行函数lambda : task_queue;
task = manager.get_task_queue()
result = manager.get_result_queue()# 6. 往队列里面放执行任务需要的数据;
for i in range(1000):# 模拟有1000个数字;n = random.randint(1, 100)task.put(n)print("任务列表中加入任务: %d" %(n))# 7. 从result队列中读取各个机器中任务执行的结果;
for i in range(10):res = result.get()print("队列任务执行的result: %s" %(res))# 8. 关闭manager对象, 取消共享的队列
manager.shutdown()
客户端一:
import time
from multiprocessing.managers import BaseManager# 1. 连接Master端, 获取共享的队列;ip是master端的ip, port'也是master端manager进程绑定的端口;
slave = BaseManager(address=('172.25.76.250', 4001), authkey=b'westos')# 2. 注册队列, 获取共享的队列内容;
BaseManager.register('get_task_queue')
BaseManager.register('get_result_queue')# 3. 连接master端;
slave.connect()# 4. 通过网络访问共享的队列;
task = slave.get_task_queue()
result = slave.get_result_queue()# 5. 读取管理端共享的任务, 并依次执行;
for i in range(500):n = task.get()print("slave1 运行任务 %d ** 2: " % (n))res = "slave1: %d ** 2 = %d" % (n, n ** 2)time.sleep(1)# 将任务的运行结果放入队列中;result.put(res)print("执行结束........")
客户端二:
import time
from multiprocessing.managers import BaseManager# 1. 连接Master端, 获取共享的队列;ip是master端的ip, port'也是master端manager进程绑定的端口;
slave = BaseManager(address=('172.25.76.250', 4001), authkey=b'westos')# 2. 注册队列, 获取共享的队列内容;
BaseManager.register('get_task_queue')
BaseManager.register('get_result_queue')# 3. 连接master端;
slave.connect()# 4. 通过网络访问共享的队列;
task = slave.get_task_queue()
result = slave.get_result_queue()# 5. 读取管理端共享的任务, 并依次执行;
for i in range(500):n = task.get()print("slave2: 运行任务 %d ** 2: " % (n))res = "slave2: %d ** 2 = %d" % (n, n ** 2)time.sleep(1)# 将任务的运行结果放入队列中;result.put(res)print("执行结束........")