• 分布式进程


    服务进程

    import random, time, queue
    from multiprocessing.managers import BaseManager
    
    #发送任务的队列
    task_queue = queue.Queue()
    #接收结果的队列
    result_queue = queue.Queue()
    
    #从BaseManager继承QueueManager
    class  QueueManager(BaseManager):
        pass
    
    #把两个Queue都注册到网络上,callable参数关联了Queue对象
    QueueManager.register('get_task_queue',callable=lambda : task_queue)
    QueueManager.register('get_result_queue',callable=lambda : result_queue)
    #绑定端口5000,设置验证码(或认证码authkey)‘abc’
    manager = QueueManager(address=('',5000),authkey=b'abc')
    #启动Queue
    manager.start()
    #获得通过网路访问的Queue对象
    task = manager.get_task_queue()
    result = manager.get_result_queue()
    #放几个任务进去
    for i in range(10):
        n = random.randint(0,10000)
        print('put task %d...'% n)
        task.put(n)
    #从result队列读取结果
    print('try get results...')
    for i in range(10):
        r = result.get(timeout=10)
        print('result:%s'% r)
    #关闭
    manager.shutdown()
    print('master exit')
    #任务进程连接前输出:
    put task 4665... put task 9480... put task 9136... put task 985... put task 4288... put task 6584... put task 4208... put task 6737... put task 9565... put task 8505... try get results...
    #任务进程连接后汇总输出:
    put task 4263... put task 6298... put task 6383... put task 180... put task 7008... put task 9011... put task 9998... put task 6270... put task 3352... put task 2519... try get results... result:4263 * 4263 = 18173169 result:6298 * 6298 = 39664804 result:6383 * 6383 = 40742689 result:180 * 180 = 32400 result:7008 * 7008 = 49112064 result:9011 * 9011 = 81198121 result:9998 * 9998 = 99960004 result:6270 * 6270 = 39312900 result:3352 * 3352 = 11235904 result:2519 * 2519 = 6345361 master exit

    任务进程

    import sys,time,queue
    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'   #本机
    server_addr = '192.168.254.118'  #虚拟机系统IP
    print('connect to server %s...'% server_addr)
    #端口和验证码注意保持和 服务进程 设置的完全一致
    m = QueueManager(address=(server_addr,5000),authkey=b'abc')
    #从网络连接
    m.connect()
    #获得Queue对象
    task = m.get_task_queue()
    result = m.get_result_queue()
    #从task队列取任务,并把结果写入result队列
    for i in range(10):
        try:
            n = task.get(timeout=1)
            print('run task %d * %d'%(n,n))
            r = '%d * %d = %d'%(n,n,n*n)
            time.sleep(1)
            result.put(r)
        except Queue.Empty:
            print('task queue is empty')
    #处理结束
    print('worker exit')
    #任务进程运行结果:
    connect to server 192.168.254.118... run task 4263 * 4263 run task 6298 * 6298 run task 6383 * 6383 run task 180 * 180 run task 7008 * 7008 run task 9011 * 9011 run task 9998 * 9998 run task 6270 * 6270 run task 3352 * 3352 run task 2519 * 2519 worker exit
    渐变 --> 突变
  • 相关阅读:
    便签一
    当代大学生存在问题及需求分析
    字符 单词数 行数
    流量管理系统——需求分析
    简单的四则运算
    强大的修图app--美图秀秀
    js 中 setTimeout()的用法
    .net spit 用法
    关闭 Activity 关闭方式 finish(), exit(), killProcess(), restartPackage()(转载)
    Android实现购物车功能
  • 原文地址:https://www.cnblogs.com/lybpy/p/7867366.html
Copyright © 2020-2023  润新知