os.plock(op) 関数を使用してこれを行うと確信していますが、方法がわかりません。また、良い方法があれば教えていただけるとありがたいです。コード スニペットは大歓迎です。
5 に答える
サブプロセスは、os.popen、os.system、os.spawn、popen2、およびコマンドを置き換えます。配管の簡単な例は次のとおりです。
p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]
プロセス間の共有メモリ用に flag=MAP_SHARED を指定してメモリ マップ ファイルを使用することもできます。
multiprocessingは、パイプと共有メモリの両方を抽象化し、より高いレベルのインターフェイスを提供します。処理ドキュメントから取得:
from multiprocessing import Process, Pipe
def f(conn):
conn.send([42, None, 'hello'])
conn.close()
if __name__ == '__main__':
parent_conn, child_conn = Pipe()
p = Process(target=f, args=(child_conn,))
p.start()
print parent_conn.recv() # prints "[42, None, 'hello']"
p.join()
Python 2.6 で新しく追加されたmultiprocessingモジュールを見てください(以前のバージョンのpyprocessingでも利用できます)。
たとえば、パイプを使用して情報を渡す方法を示すドキュメントの例を次に示します。
from multiprocessing import Process, Pipe
def f(conn):
conn.send([42, None, 'hello'])
conn.close()
if __name__ == '__main__':
parent_conn, child_conn = Pipe()
p = Process(target=f, args=(child_conn,))
p.start()
print parent_conn.recv() # prints "[42, None, 'hello']"
p.join()
これはほとんど Python に依存しません! これは Unix プロセス間通信の典型的な例です。1 つの適切なオプションはpopen()
、親プロセスと子プロセスの間のパイプを開き、パイプに沿ってデータ/メッセージをやり取りするために使用することです。
子プロセスの生成中に必要なパイプを自動的にセットアップできるsubprocess
モジュールを見てください。
モジュールを使用するか、モジュールを使用os.popen*
して同じ効果を得ることができます。Python のマニュアルには、popenとsubprocessのかなりのドキュメントと例があります。os
subprocess