分布式进程

实际开发应用中遇到的大型计算任务,一台主机无法进行计算时,可以将问题发布,由多个主机进行计算
from multiprocessing.managers import BaseManager

  • 管理端
import random
from multiprocessing.managers import BaseManager
from queue import Queue
import time
#创建任务队列和执行结果的队列
task_queue=Queue()
result_queue=Queue()

#将队列注册到网上
BaseManager.register("get_task_queue",callable=lambda :task_queue)
BaseManager.register("get_result_queue",callable=lambda :result_queue)

#创建一个manager对象并绑定端口号和设置验证码
manager=BaseManager(address=('192.168.122.1',6787),authkey=b'redhat')

#启动manager
manager.start()


#通过网络获取任务队列和结果队列
task=manager.get_task_queue()
result=manager.get_result_queue()

#给任务队列添加任务
for i in range(40):
    n = random.randint(1, 100)
    print('任务列表加入任务: %s' %(n))
    task.put(n)
    time.sleep(0.5)


#从结果队列接收结果

for j in range(100):
    r = result.get()
    print("队列任务的结果: %s" %(r))


#关闭manager对象

manager.shutdown()
  • 被管理端1
import queue
from multiprocessing.managers import BaseManager
import time


#同样在网上注册两个队列,且队列名要和管理端保持一致


BaseManager.register('get_task_queue')
BaseManager.register('get_result_queue')

#创建一个管理端下的被管理对象,ip 端口 验证码  必须和管理端保持一致
M=BaseManager(address=('192.168.122.1',6787),authkey=b'redhat')

#连接到管理端
M.connect()


#获取任务队列和结果队列
task=M.get_task_queue()
result=M.get_result_queue()


#读取管理端的任务,并将执行结果返回到结果队列中
for i in range(20):
    try:
        n=task.get()
        print('正在执行任务%s求平方...'%n)
        time.sleep(1)
        res=n**2
        result.put(res)
    except queue.Empty:
        print('任务队列为空..')


print('任务执行结束....')

  • 被管理端2
import queue
from multiprocessing.managers import BaseManager
import time


BaseManager.register('get_task_queue')
BaseManager.register('get_result_queue')


M=BaseManager(address=('192.168.122.1',6787),authkey=b'redhat')


M.connect()



task=M.get_task_queue()
result=M.get_result_queue()


for i in range(20):
    try:
        n=task.get()
        print('正在执行任务%s求平方...'%n)
        time.sleep(1)
        res=n**2
        result.put(res)
    except queue.Empty:
        print('任务队列为空..')
print('任务执行结束....')
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值