• python分布式进程


    分布式进程可以布置在局域网之中,把安排的任务注册到局域网内,不同主机之间就可以传递信息,从而分配任务和反馈,不过并不适合返回大量数据;

    首先需要一个服务器server,用来存放数据,其他机器通过局域网内ip访问到:

    # -*- coding: utf-8 -*-
    #注册进程,manager/server
    import multiprocessing
    from multiprocessing.managers import BaseManager
    from multiprocessing import freeze_support
    
    # 从BaseManager继承的QueueManager:
    class QueueManager(BaseManager):
        pass
    
    # 发送任务的队列:
    task_queue = multiprocessing.Queue()
    # 接收结果的队列:
    result_queue = multiprocessing.Queue()
    
    # 为解决__main__.<lambda> not found问题
    def get_task_queue():
        return task_queue
    
    # 为解决__main__.<lambda> not found问题
    def get_result_queue():
        return result_queue
    
    
    # 把两个Queue都注册到网络上, callable参数关联了Queue对象:
    QueueManager.register('get_task_queue', callable=get_task_queue)
    QueueManager.register('get_result_queue', callable=get_result_queue)
    # 绑定端口5000, 设置验证码'abc':
    manager = QueueManager(address=('192.168.10.138', 5000), authkey='abc')
    
    freeze_support()
    #manager.start() 不能正常运行时,使用以下方法作为进程通信服务器
    server = manager.get_server()
    server.serve_forever()
    使用server.serve_forever()来开启进程通信服务器,本身进程就阻塞了,永远地作为通信数据的存储进程。
    其他进程可以访问、修改 服务器进程的通信数据来达到传输信息的目的。

    
    # _*_ coding:utf-8 _*_
    """ a work manager sample """
    import Queue
    from multiprocessing.managers import BaseManager
    
    import time
    
    
    class QueueManager(BaseManager):
        pass
        
    # 从网络上获取Queue
    QueueManager.register('get_task_queue')
    QueueManager.register('get_result_queue')
    
    # 连接服务器
    server_addr = '192.168.10.141'
    print 'Connect to server %s ...' % server_addr
    manager = QueueManager(address=(server_addr, 5000), authkey='abc')
    manager.connect()
    
    # 获取Queue对象
    task = manager.get_task_queue()
    result = manager.get_result_queue()

    注意注册到服务器的ip和端口要和通信服务器端的一致。

    局域网内各进程间接地通过 服务器来交换信息。

     

     
  • 相关阅读:
    数组对象
    禁止鼠标右键保存图片、文字,禁止拖动图片等代码
    解决vscode 电脑卡顿
    vscode Html标签自动补全
    git提交报错
    作为一个程序员为什么要写博客?
    aaa
    JDBC
    去ioe
    去中心化
  • 原文地址:https://www.cnblogs.com/willowj/p/7300879.html
Copyright © 2020-2023  润新知