• python分布式进程


    廖雪峰老人的url

    1、master端代码

     1 import random, time, queue
     2 from multiprocessing.managers import BaseManager
     3 
     4 # 发送任务的队列
     5 task_queue = queue.Queue()
     6 # 接受任务的队列
     7 result_queue = queue.Queue()
     8 
     9 
    10 class QueueManager(BaseManager):
    11     pass
    12 
    13 
    14 # 把两个Queue都注册到网络上,allable参数关联了Queue对象:
    15 QueueManager.register('get_task_queue', callable=lambda: task_queue)
    16 QueueManager.register('get_result_queue', callable=lambda: result_queue)
    17 
    18 # 绑定端口5000, 设置验证码'abc':
    19 manager = QueueManager(address=('', 5000), authkey=b'abc')
    20 # 启动Queue
    21 manager.start()
    22 # 获得通过网络访问的Queue对象:
    23 task = manager.get_task_queue()
    24 result = manager.get_result_queue()
    25 
    26 # 放几个任务进去:
    27 for i in range(1000):
    28     n = random.randint(0, 1000)
    29     print('Put task %d ...' % n)
    30     task.put(n)
    31 
    32 # 从result队列中读取结果:
    33 print('Try get results...')
    34 for i in range(1000):
    35     r = result.get(timeout=10)
    36     print('Result :%s' % r)
    37 
    38 #关闭
    39 manager.shutdown()
    40 print('master exit.')

    2、slave代码

     1 # task_worker.py
     2 
     3 import time, sys, queue
     4 from multiprocessing.managers import BaseManager
     5 
     6 # 创建类似的QueueManager:
     7 class QueueManager(BaseManager):
     8     pass
     9 
    10 # 由于这个QueueManager只从网络上获取Queue,所以注册时只提供名字:
    11 QueueManager.register('get_task_queue')
    12 QueueManager.register('get_result_queue')
    13 
    14 # 连接到服务器,也就是运行task_master.py的机器:
    15 server_addr = '127.0.0.1'
    16 print('Connect to server %s...' % server_addr)
    17 # 端口和验证码注意保持与task_master.py设置的完全一致:
    18 m = QueueManager(address=(server_addr, 5000), authkey=b'abc')
    19 # 从网络连接:
    20 m.connect()
    21 # 获取Queue的对象:
    22 task = m.get_task_queue()
    23 result = m.get_result_queue()
    24 # 从task队列取任务,并把结果写入result队列:
    25 for i in range(100):
    26     try:
    27         n = task.get(timeout=1)
    28         print('run task %d * %d...' % (n, n))
    29         r = '%d * %d = %d' % (n, n, n*n)
    30         time.sleep(1)
    31         result.put(r)
    32     except task.Empty:
    33         print('task queue is empty.')
    34 # 处理结束:
    35 print('worker exit.')

    3、先执行master,再执行slave

  • 相关阅读:
    Android ELF文件格式
    AWS发布架构师认证的专业解决方案
    python django模型内部类meta详细解释
    SQL_substr功能测试
    猫学习IOS(四)UI半小时就搞定Tom猫
    使用jquery点击一个实现button或连接,进行以下div显示,在点击隐藏
    hdu2852--KiKi's K-Number(段树,求第一k的数量)
    信息安全官谁:逼近的挑战,你准备好了吗?
    VS2010使整个过程说明了安装包
    进程的创建与可执行程序的加载
  • 原文地址:https://www.cnblogs.com/ceshixuexi/p/9051726.html
Copyright © 2020-2023  润新知