プロセスを制御するためのベスト プラクティスを確認するのに適した場所はどこですか。
具体的には、シャットダウン コマンドを実行する方法を知りたいです。各プロセスがポーリングするグローバルブール値を考えていました
また、アクティブなプロセスとの間でデータをやり取りするための良い方法です。
ほとんどがハウツーである良いブログ投稿が見つかりませんでした
プロセスを制御するためのベスト プラクティスを確認するのに適した場所はどこですか。
具体的には、シャットダウン コマンドを実行する方法を知りたいです。各プロセスがポーリングするグローバルブール値を考えていました
また、アクティブなプロセスとの間でデータをやり取りするための良い方法です。
ほとんどがハウツーである良いブログ投稿が見つかりませんでした
プロセス間で共有できないことを除いて、グローバルブール値のアイデアは非常に優れています。ただし、各サブプロセスでそのブール値のコピーを保持できます。
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 システムを使用することもできます (ポーリング効率について心配する必要はありません)。
一般に、共有するプロセスが少ないほど良い結果が得られます。