0

私がまだ Python に比較的慣れていないことを最初に認めます。この掲示板には大変お世話になりました…

マルチスレッド HTTP サーバーを使用しているプロジェクトに取り組んでおり、信号をメイン ループに送り返す必要があります。私はこれをベースにしようとしています: Passing a Queue to ThreadedHTTPServer

これが私が現在行っていることの抜粋です(Python 3.4で):

if __name__ == '__main__':
    ...
    q1 = Queue(maxsize=0)

    ...
    remote_http_thread = threading.Thread(target=remote_threader, args=(q1))
    remote_http_thread.daemon = True
    remote_http_thread.start()
    ...


    while 1:
        time.sleep(1)
        try:
            my_message = q1.get_nowait()
            message_flag = 1
            print("GOT THE FOLLOWING QUEUE MESSAGE :", my_message)
        except:
            message flag = 0
        ...

以下は別のファイルにあります(私のHTTPサーバーコード):

def remote_threader(qit):
    remote_Server = ThreadedHTTPServer(("", 35677), P_Server)
    remote_Server.qu = qit
    remote_Server.serve_forever()

class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
    """Handle requests in a separate thread."""

class P_Server(BaseHTTPRequestHandler):
    def __init__(self, request, client_address, server):
    BaseHTTPRequestHandler.__init__(self, request, client_address, server)
    self.qu = server.qu # save the queue here.

    def go_GET(self):
        ...
        #  We have an event that we want to signal back to the main loop
        self.qu.put("Event")

HTTP サーバーは正常に動作し、特定のイベントが発生するように、メッセージをメイン ループに戻そうとしています。上記のコードを実行すると、P_Server に属性 'qu' がないという例外が発生します

テストの結果、 initステップで作成した属性(ハードコードされた数値や文字列であっても) は、「do_GET」セクションでは使用できないようです。

メインセクションがHTTPサーバークラスのキューにメッセージを入れるように変更できますか?

4

1 に答える 1