3

実行する必要がある動的に生成されたプロセス (引数付きのコマンド ライン ライブラリ) のリストがあります。

それらのいくつかは互いに依存していることを私は知っています。この情報を含むオブジェクトがいくつかあります。たとえば、standalone_exec_item には process_data.process_id とdependent_on_process_ids (プロセス ID のリスト) が含まれます。

現在、マルチプロセッシング ライブラリを使用して、次のようにプロセスのリストを非同期的に実行することを考えています。

from multiprocessing import Process
import subprocess

def execute_standalone_exec_items(standalone_exec_items):

        standalones = []

        def run_command(command):
            output = subprocess.check_output(shlex.split(command))
            return output

        for standalone_exec_item in standalone_exec_items:
            standalone_command = generate_command(standalone_exec_item.process_data)

            standalone = Process(
                target=run_command,
                args=(standalone_command,)
            )
            standalones.append(standalone)

        for standalone in standalones:
            standalone.start()

        while True:
            flag = True
            for standalone in standalones:
                if standalone.is_alive():
                    flag = False
            if flag:
                break

ただし、依存プロセスを実行する前に非同期プロセスが実行されるのを待つより良い方法があるかどうかを知りたいです。コールバックを使用できますか? Twisted の deferred について聞いたことがありますが、これを使用できますか?

ベストプラクティスは何ですか?

編集: Popen がノンブロッキングであり、マルチプロセッシングを使用する必要がないのは正しいですか? または、fcntl() を使用する必要がありますか?

4

1 に答える 1

0

メッセージキューを使用します。この場合、プロセスと呼ばれるプロセスがサブスクライブするメッセージを公開するプロセスがあります。

于 2012-08-20T23:26:03.100 に答える