2014-02-06 1 views
0

Я хотел бы передать объект Queue на базовую реализацию ThreadedHTTPServer. Мой существующий код работает очень хорошо, но я бы хотел, чтобы безопасный способ отправлять вызовы и из моих HTTP-запросов. Обычно это, вероятно, будет обрабатываться веб-средой, но это ограниченная среда HW.Передача очереди в ThreadedHTTPServer

Мое основное недоразумение заключается в том, как передать объект Queue (или любой), чтобы разрешить доступ к другим модулям в моей среде.

Шаблон базового кода я в настоящее время работает:

import base64,threading,urlparse,urllib2,os,re,cgi,sys,time 
import Queue 

class DemoHttpHandler(BaseHTTPRequestHandler):  
    def __init__(self, request, client_address, server,qu): 
     BaseHTTPRequestHandler.__init__(self, request, client_address, server) 
    def do_GET(self): 
     ... 
class ThreadedHTTPServer(ThreadingMixIn, HTTPServer): 
    """Handle requests in a separate thread.""" 

def main(): 
    listen_interface = "localhost" 
    listen_port = 2323 
    server = startLocalServer.ThreadedHTTPServer((listen_interface, listen_port), startLocalServer.DemoHttpHandler) 
    server_thread = threading.Thread(target=server.serve_forever) 
    server_thread.daemon = True 
    server_thread.start() 
    print 'started httpserver thread...' 

ответ

1

Ваш код не работает, но я могу изменить его так Цзоу может заставить ее работать:

import base64,threading,urlparse,urllib2,os,re,cgi,sys,time 
import Queue 

class DemoHttpHandler(BaseHTTPRequestHandler):  
    def __init__(self, request, client_address, server): 
     BaseHTTPRequestHandler.__init__(self, request, client_address, server) 
     self.qu = server.qu # save the queue here. 
    def do_GET(self): 
     ... 
     self.qu # access the queue self.server.qu 
class ThreadedHTTPServer(ThreadingMixIn, HTTPServer): 
    """Handle requests in a separate thread.""" 

def main(): 
    listen_interface = "localhost" 
    listen_port = 2323 
    qu = Queue.Queue() 
    server = startLocalServer.ThreadedHTTPServer((listen_interface, listen_port), startLocalServer.DemoHttpHandler) 
    server.qu = qu # store the queue in the server 
    server_thread = threading.Thread(target=server.serve_forever) 
    server_thread.daemon = True 
    server_thread.start() 
    print 'started httpserver thread...' 
+0

Спасибо, что выглядит, как это делает что я хотел делать. У меня возникли проблемы после того, как передать аргумент в эту конструкцию. – radix07

Смежные вопросы