1

スレッドを開始してソケットをリッスンし、同じプログラムによって起動される別のアプリケーションに HTTP データを送信する python スクリプトを作成しようとしています。アプリケーションを実行する前に、ソケット サーバーが実行されている必要があります。ただし、ソケットサーバーを実行しているスレッドは、プログラムのそれ以上の実行をブロックし、リッスンしている場所でフリーズします。ダミーコードを入れます。

モジュール 1 では:

def runServer(Port, Host, q):
    HTTPServerObj = HTTPServer((Host, Port), RequestHandler)
    HTTPServerObj.handle_request()
    HTTPServerObj.server_close()
    q.put((True, {'messageDoNotDuplicate': 'Data sent successfully by the server'}))

class SpoofHTTPServer(object):
    def runServerThread(self):
        q = Queue.Queue()
        serverThread=Thread(target=runServer, args=(self.Port, self.Host, q))
        serverThread.daemon=True
        serverThread.start()
        result = q.get()
        print result
        return result

モジュール 2 では:

from module1 import SpoofHTTPServer

spoofHTTPServer = SpoofHTTPServer()
result = spoofHTTPServer.runServerThread()
rc = myApp.start()

スレッドがブロックしているため、 myApp.start() は実行されません。

4

2 に答える 2

0

これは Python 3 から機能する可能性があります。接続し('localhost', 8080)て動作を確認してください。

import queue as Queue
from threading import Thread
from http.server import HTTPServer
from socketserver import BaseRequestHandler as RequestHandler

def runServer(Port, Host, q):
    HTTPServerObj = HTTPServer((Host, Port), RequestHandler)
    HTTPServerObj.handle_request()
    HTTPServerObj.server_close()
    q.put((True, {'messageDoNotDuplicate':
                  'Data sent successfully by the server'}))

class SpoofHTTPServer(object):

    Port = 8080
    Host = ''

    def runServerThread(self):
        q = Queue.Queue()
        serverThread=Thread(target=runServer, args=(self.Port, self.Host, q))
        serverThread.daemon=True
        serverThread.start()
        result = q.get()
        print(result)
        return result

spoofHTTPServer = SpoofHTTPServer()
result = spoofHTTPServer.runServerThread()
##rc = myApp.start()
于 2013-07-10T17:51:30.483 に答える