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
    渐变 --> 突变
  • 相关阅读:
    wireshark和tcpdump抓包TCP乱序和重传怎么办?PCAP TCP排序工具分享
    途游斗地主加密协议分析及破解
    linux下unzip解压报错“symlink error: File name too long”怎么办?提供解决方案。
    GPS NMEA-0183协议常用报文数据格式
    微信出现“已停止访问该网页”或“关于潜在的违法或违规内容”怎么办?如何获取被屏蔽的网页的网址?...
    m3u8视频格式分析
    精确哈克,以贪婪为基础的欺诈式引流法
    某米浏览器黑名单文件破解
    HTTP.sys远程执行代码漏洞
    SNMP协议利用
  • 原文地址:https://www.cnblogs.com/lybpy/p/7867366.html
Copyright © 2011-2022 走看看