0

バックグラウンドで実行されるスクリプトを作成する必要があります。スクリプトは常にmemcachedサーバーへの接続を開き、他のプログラムからパラメーターを取得することを望んでいます。受信パラメータースクリプトがいくつかの作業を行い、その最初のプログラムに情報を出力します。私の最大の問題は、そのスクリプトをバックグラウンドで実行し、パラメーターを待機する方法です。

4

2 に答える 2

0

他のプログラムからどのようにパラメータを取得しているのか、またはどのように待っているのかを正確に知らなければ、具体的な答えを出すのは困難です。

しかし、説明のために、ポート6789へのTCP接続をリッスンしていて、他のプログラムがそのソケットに接続して、改行で区切られた固定数のパラメーターを送信するとします。

これを行う最も簡単な方法は、ブロックすることです。

memcache_connection = # however you set this up
sock = socket.socket()
sock.bind(('', 6789))
sock.listen(5)
while True:
    conn, addr = sock.accept()
    with contextlib.closing(conn) as client:
        with client.makefile() as f:
            param1, param2, param3 = f
        result = do_memcache_stuff(memcache_connection, param1, param2, param3)
        client.sendall(result)

明らかに、ここにはエラー処理はなく、^ C以外に終了する方法はありませんが、そのようなものは簡単に追加できます。

さらに深刻なことに、一度に処理できるコマンドは1つだけです。それが問題になる場合は、通常の2つの選択肢があります。スレッド化またはイベントループです。2つのクライアント接続間で情報を共有する必要がなく、一度に数十を超える処理を行う必要がない場合は、通常、スレッド化の方が簡単です。ハンドラーを関数でラップしてからスポーンするだけです。それで:

def handle_client(conn):
    with contextlib.closing(conn) as client:
        with client.makefile() as f:
            param1, param2, param3 = f
        result = do_memcache_stuff(memcache_connection, param1, param2, param3)
        client.sendall(result)

memcache_connection = # however you set this up
sock = socket.socket()
sock.bind(('', 6789))
sock.listen(5)
while True:
    conn, addr = sock.accept()
    t = threading.Thread(target=handle_client, args=(conn,))
    t.daemon = True
    t.start()
于 2013-03-01T22:30:06.933 に答える
0

マルチスレッドと呼ばれるものを実行したい場合は、Pythonのドキュメントでそれを読むか、自分で試してみてください。

import threading
于 2013-03-02T11:48:05.650 に答える