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

    服务进程

    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
    渐变 --> 突变
  • 相关阅读:
    简化单例模式
    static
    单例模式之懒汉模式
    Car race game
    poj-2403
    poj-2612
    poj-1833
    poj--2782
    poj--2608
    poj--3086
  • 原文地址:https://www.cnblogs.com/lybpy/p/7867366.html
Copyright © 2011-2022 走看看