码迷,mamicode.com
首页 > 编程语言 > 详细

python分布式进程

时间:2017-08-07 20:47:52      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:manager   main   address   分配   ret   通信   start   call   pre   

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

首先需要一个服务器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和端口要和通信服务器端的一致。

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

 

 

python分布式进程

标签:manager   main   address   分配   ret   通信   start   call   pre   

原文地址:http://www.cnblogs.com/willowj/p/7300879.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!