简单搭建分布式计算

#主机控制代码

import multiprocessing
import multiprocessing.managers
import random,time
from multiprocessing import Queue
# 任务队列
task_queue=Queue()
# 结果队列
result_queue=Queue()

# 提供给从机调用后得到队列中的数据
# 就是接口
def return_task():
	return task_queue
def return_result():
	return result_queue
class QueueManager(multiprocessing.managers.BaseManager):
	pass
if __name__=="__main__":
	# 开启分布式支持
	multiprocessing.freeze_support()
	# 注册可以访问队列并得到结果的函数
	QueueManager.register('get_task',callable=return_task)
	QueueManager.register('get_result',callable=return_result)
	manager=QueueManager(address=('192.168.72.135',8888),authkey='password'.encode('utf-8'))
	manager.start()
	task=manager.get_task()
	result=manager.get_result()
	for i in range(1000):
		print('task add data')
		#将任务放入队列
		task.put(i)
		print('watting for ____')
	for i in range(1000):
	       #将结果从队列中取出
		res=result.get()
		print('get_data',res)
	manager.shutdown()
×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
×××××××××××××××××××××
import multiprocessing
import multiprocessing.managers
import random,time
from multiprocessing import Queue

class QueueManager(multiprocessing.managers.BaseManager):
	pass
if __name__=="__main__":
	# 开启分布式支持
	multiprocessing.freeze_support()
	# 注册可以访问队列并得到结果的函数
	QueueManager.register('get_task')
	QueueManager.register('get_result')
	manager=QueueManager(address=('192.168.72.135',8888),authkey='password'.encode('utf-8'))
	manager.connect()
	task=manager.get_task()
	result=manager.get_result()
	for i in range(1000):
		try:
		#从队列中取出任务
			data=task.get()
			print('client_get',data)
#处理计算任务将结果放入队列中			result.put('client'+str((data+10)))
		except:
			pass

上面是单一任务可开启多个从机来处理数据由于每个从机取出任务后该任务就会在队列中消失
所以每个任务只能给一个从机处理所以不会造成任务重复

另外还可以定义不同算法的从机,但在此时也因该定义不同算法的主机来控制接受数据
所以有一个命令主机程序负责控制不同算法队列 该任务队列是将控制不同算法的输入队列的开启和控制每个从机的不同算法的开启 在自己本地执行接到的某一算法处理程序

在这里插入图

控制程序和算法程序除了端口和加入队列的数据不同都是一样的
算法程序被控制程序启动 无论是主机上还是从机上
只不过是主机上是当控制程序的命令加入队列后就立即启动了所有加入队列被控制的算法程序
待每个从机从控制队列中拿到命令那个算法由自己执行后便开启了响应的算法
每个从机都有所有的算法处理程序无论是接到处理什么的任务都可以处理
且每个从机都拥有控制从机程序从控制队列中获取任务
每个算法程序独立一个端口独立一个队列对应一个独立的从机程序

队列的多样性使得 此方法 更加强大 能将多任务多机合作进行白百分百的发挥
效率一般高效

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东方佑

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值