• 分布式进程


    分布式进程可以有multiprocessing模块的managers子模块支持,可以写一个服务进程作为调度者,将任务分布到其他多个进程中,依靠网络通信进行管理

    taskManager.py

    import random,time,queue
    from multiprocessing.managers import BaseManager
    
    # 第一步:建立task_queue和resul_queue,用来存放任务和结果
    task_queue = queue.Queue()
    result_queue = queue.Queue()
    
    class Queuemanager(BaseManager):
        pass
    
    #第二步:把创建的两个队列注册到网络上,利用register方法,callable参数关联了Queue对象
    # 将queue对象在网络中暴露
    
    Queuemanager.register('get_task_queue',callable=lambda:task_queue)
    
    Queuemanager.register('get_result_queue',callable=lambda:result_queue)
    
    # 第三步绑定端口,设置验证口令
    manager = Queuemanager(address=('',8001),authkey='qiye'.endode('utf-8'))
    
    # 第四步 启动管理,监听信息通道
    manager.start()
    
    # 第五步 通过管理实例的方法获取通过网络访问的Queue对象
    task = manager.get_task_queue()
    result = manager.get_result_queue()
    
    #第六步 :添加任务
    for url in ['ImageUrl_' + str(i) for i in range(10)]:
        print('put task %s' % url)
        task.put(url)
    
    # 获取返回结果
    print('try get result...')
    for i in range(10):
        print('result is %s' % result.get(timeout=10))
        
    # 关闭管理
    manager.shutdown()

    taskManager.py

    import time
    from multiprocessing.managers import BaseManager
    
    # 创建类似的QueueManager
    
    class QueueManager(BaseManager):
        pass
    
    # 第一步:使用QueueManager 注册用于获取Queue的方法名称
    QueueManager.register('get_task_queue')
    
    QueueManager.register('get_result_queue')
    
    # 第二步:连接到服务器
    server_addr = '127.0.0.1'
    print('connect to server %s ..' % server_addr)
    
    #端口和验证口令注意保持和服务进程完全一致
    m = QueueManager(address=(server_addr,8001),authkey='qiye'.encode('utf-8'))
    
    # 从网络连接
    m.connect()
    
    # 第三步:获取Queue对象
    task = m.get_task_queue()
    result = m.get_result_queue()
    
    #第四步:从task队列获取任务,并把结果写入result队列
    while (not task.empty()):
        image_url = task.get(True,timeout=5)
        print('run task download %s' % image_url)
        time.sleep(1)
        result.put('%s --->success' % image_url)
    
    # 处理结束
    print('worker exit.')

     

  • 相关阅读:
    失落时就励志一下
    域名续费一年
    BIM新时代背景下的建筑业技术变革
    培养自信的自己
    吧台人很多
    BlogEngine学习一:操作符重载
    CSS Sprite打造个性化导航
    WinForm中的DataGridView子窗体刷新父窗体备忘
    WinForms下的SliderButtons设计
    GridView中实现DropDownList联动
  • 原文地址:https://www.cnblogs.com/Erick-L/p/7708781.html
Copyright © 2020-2023  润新知