2つのアルゴリズムAとBがあります。文字列を返し、新しい文字列を返します。Python 3:2つのプロセスを開始するにはどうすればよいでしょうか?最初に終了したときから答えを返し、他のプロセスを早期に停止します。
実行される変換は、非常にCPUを集中的に使用することがあり、アルゴリズムにはさまざまなアプローチがあります。アルゴリズムは入力文字列に応じて大幅に異なる処理を行いますが、どのアルゴリズムが変換を適用するのではなく、その答えだけを気にします。
私は少し良く、問題を説明するために、いくつかの擬コードを書いている:
def process_alg1(algorithm1, input_string)
ans_string = algorithm1(input_string)
q.put(ans_string)
def process_alg2(algorithm2, input_string)
ans_string = algorithm2(input_string)
q.put(ans_string)
def apply_transformation(input_string):
q = multiprocess.Queue()
process_alg1(input_string)
process_alg2(input_string)
final_answer = q.get()
stop(slowest_process)
私はデーモンプロセスを使用する必要が推測していますか?私はどのようなアプローチを取る必要があるのか分かりません。私はプロセスと、遅いプロセスが停止するように指示する何らかのハンドラの間にパイプラインを設定していますか?デーモンとキューでこれを行うことはできますか?
私は同じアルゴリズムの複数の入力の例をたくさん見つけましたが、同じ入力を扱う複数のアルゴリズムの例は見つかりませんでした。
ありがとうございました。
あなたは定期的にそれがまだ終了しているかどうかを判断するために、子プロセス 'exitcode'属性をポーリングするメインプロセスが必要になります。他の子(またはその両方)が定期的にチェックして終了することを知るように、ある種の共有変数を変更する必要があります。 sigkillを送信するのはうれしくないし、同等の窓を持たない。 – Aaron
@Aaron、私は両方のデーモンプロセスを使用し、私のプログラムの別の部分からこのapply_transformation関数を呼び出すと、プロセスはapply_transformation呼び出しの後、またはプログラム全体が終了した後で終了しますか? –
ダーモンプロセスのようなものはありません。スレッドのみ – Aaron