1

プロセスを制御するためのベスト プラクティスを確認するのに適した場所はどこですか。

具体的には、シャットダウン コマンドを実行する方法を知りたいです。各プロセスがポーリングするグローバルブール値を考えていました

また、アクティブなプロセスとの間でデータをやり取りするための良い方法です。

ほとんどがハウツーである良いブログ投稿が見つかりませんでした

4

1 に答える 1

2

プロセス間で共有できないことを除いて、グローバルブール値のアイデアは非常に優れています。ただし、各サブプロセスでそのブール値のコピーを保持できます。

1 つの方法は、スレッドと一緒にパイプやキューを使用することです。そんな感じ:

from multiprocessing import Process, Pipe
from threading import Thread

Alive = True    

def listener_thread(conn):
    global Alive
    while True:
        data = conn.recv()
        if data == "kill":
            Alive = False
            break

def subprocess(conn):
    t = Thread(target=listener_thread, args=(conn,))
    t.start()
    while Alive:
        # do some stuff here

if __name__ == '__main__':
    parent_conn, child_conn = Pipe()
    p = Process(target=subprocess, args=(child_conn,))
    p.start()
    # do some stuff
    parent_conn.send("kill")
    p.join()

(parent_conn, child_conn)各サブプロセスごとにペアが必要になることに注意してください。これは、プロセスとサブプロセス間の通信の標準的な方法です。

または、データベース (データベースとは、単純なファイルを含む任意のデータベースを意味します) を使用して、プロセス間でデータを共有することもできます。ただし、効率的ではない可能性があるため、ポーリング スレッドが必要になります。

また、必要に応じて最適な Redis などの pub/sub システムを使用することもできます (ポーリング効率について心配する必要はありません)。

一般に、共有するプロセスが少ないほど良い結果が得られます。

于 2013-07-11T22:32:13.630 に答える