zoukankan      html  css  js  c++  java
  • 分布式进程

    分布式进程可以有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.')

     

  • 相关阅读:
    [摘录]第9章 解密优势谈判高手
    [摘录]第8章 与非美国人谈判的技巧
    [摘录]第7章 谈判压力点
    [摘录]第6章 解决棘手问题的谈判艺术
    [摘录]第5章 谈判原则
    [摘录]第4章 不道德的谈判策略
    [摘录]第3章 终局谈判策略
    [摘录]第2章 中场谈判技巧
    [摘录]第1章 开局谈判技巧
    SQL Server 视图索引
  • 原文地址:https://www.cnblogs.com/Erick-L/p/7708781.html
Copyright © 2011-2022 走看看