相关疑难解决方法(0)

Python使用multiprocessing.Manager共享网络套接字

我目前正在编写一个带有Request队列的nginx代理服务器模块,因此当nginx后面的服务器无法处理请求时,请求不会被删除(nginx被配置为负载均衡器).

我在用

from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
Run Code Online (Sandbox Code Playgroud)

我们的想法是在处理请求之前将请求放入队列中.我知道multiprocessing.Queue只支持简单对象,不能支持原始套接字,所以我尝试使用multiprocess.Manager来创建一个共享字典.Manager也使用套接字进行连接,因此该方法也失败了.有没有办法在进程之间共享网络套接字?以下是代码中存在问题的部分:

class ProxyServer(Threader, HTTPServer):

    def __init__(self, server_address, bind_and_activate=True):
        HTTPServer.__init__(self, server_address, ProxyHandler,
                bind_and_activate)

        self.manager = multiprocessing.Manager()

        self.conn_dict = self.manager.dict()
        self.ticket_queue = multiprocessing.Queue(maxsize= 10)
        self._processes = []
        self.add_worker(5)


    def process_request(self, request, client):
        stamp = time.time()
        print "We are processing"

        self.conn_dict[stamp] = (request, client) # the program crashes here


    #Exception happened during processing of request from ('172.28.192.34', 49294)
    #Traceback (most recent call last):
    #  File "/usr/lib64/python2.6/SocketServer.py", line 281, in _handle_request_noblock
    #    self.process_request(request, client_address)
    #  File "./nxproxy.py", …
Run Code Online (Sandbox Code Playgroud)

python sockets networking share process

2
推荐指数
1
解决办法
4200
查看次数

标签 统计

networking ×1

process ×1

python ×1

share ×1

sockets ×1