Python教程

【Python】简单分布式原理

本文主要是介绍【Python】简单分布式原理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

分布式:让多台计算机同时干活

计算1,2,3,...,10000 的平方数

原理:

代码(服务器):

#服务器端
import multiprocessing.managers #分布式进程管理器
import queue    #队列

task_queue = queue.Queue()  #任务队列(发出)
result_queue = queue.Queue()    #结果队列(返回)

def return_task():  #返回任务队列
    return task_queue
def return_result():    #返回结果队列
    return result_queue

class QueueManger(multiprocessing.managers.BaseManager):#继承,进程管理共享数据
    pass

if __name__ == "__main__":
    multiprocessing.freeze_support()    #开启分布式支持
    QueueManger.register("get_task",callable = return_task)#注册函数给客户端调用
    QueueManger.register("get_result",callable = return_result)
    manger = QueueManger(address=("192.168.99.1",8848),authkey=123456)#创建一个管理器,设置地址与密码
    #ip地址为本机ip
    manger.start()  #开启
    task = manger.get_task() #任务队列
    result = manger.get_result() #结果队列
    for i in range(10000):
        print("压入任务队列的数据",i)
        task.put(i) #压入数据
    print("------ 等待中 ------")
    for i in range(10000):
        res = result.get(timeout = 100)
        print("从客户端得到结果队列的数据-",res)


    manger.shutdown()   #关闭服务器

客户端:

#客户端
import multiprocessing.managers #分布式进程管理器

class QueueManger(multiprocessing.managers.BaseManager):#继承,进程管理共享数据
    pass

if __name__ == "__main__":
    QueueManger.register("get_task")    #注册函数调用服务器
    QueueManger.register("get_result")
    manger = QueueManger(address=("192.168.99.1", 8848), authkey=123456)
    manger.connect()  # 连接服务器
    task = manger.get_task()   # 任务
    result = manger.get_result() # 结果

    for i in range(10000):
        #time.sleep(1)
        try:
            data = task.get() #从队列中取出数据
            print("客户端从任务队列中得到的数据:",data)
            result.put("计算完成后压入结果队列的数据:"+str(data*data)) #将计算后的数据压入队列
        except:
            pass

运行结果(服务器端):

 

 

 

 

 

客户端:

 

这篇关于【Python】简单分布式原理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!