私は私のスクリプトマルチスレッドを作成しようと、スレッドを使用したマルチプロセッシング?
私は、マルチプロセッシングを発見しました
私はスレッドとマルチプロセッシングの仕事を作るための方法がありますかしら?- CPU 1 - > 3つのスレッド(作業者A、B、C)
- CPU 2 - > 3つのスレッド(ワーカーD、E、F)
- ...
イム私自身はそれをやろうとしていましたが、私は非常に多くの問題にぶつかりまし
これらの2つの機能を連携させる方法はありますか?
私は私のスクリプトマルチスレッドを作成しようと、スレッドを使用したマルチプロセッシング?
私は、マルチプロセッシングを発見しました
私はスレッドとマルチプロセッシングの仕事を作るための方法がありますかしら?イム私自身はそれをやろうとしていましたが、私は非常に多くの問題にぶつかりまし
これらの2つの機能を連携させる方法はありますか?
それらの内側からThreads
。各プロセスは、標準のインタプリタスレッドが処理できるほとんどのものを処理できます。したがって、新しいスレッドや各プロセス内の新しいプロセスを作成することを止めるものはありません。最小の例として:スレッド間
def foo():
print("Thread Executing!")
def bar():
threads = []
for _ in range(3): # each Process creates a number of new Threads
thread = threading.Thread(target=foo)
threads.append(thread)
for thread in threads:
thread.start()
thread.join()
if __name__ == "__main__":
processes = []
for _ in range(3):
p = multiprocessing.Process(target=bar) # create a new Process
processes.append(p)
for process in processes:
process.start()
process.join()
コミュニケーション各Process
内で処理することができ、プロセス間の通信は、キューまたはマネージャ・オブジェクトを使用してルート・インタプリタレベルで処理することができます。
あなたはprocess
を取るfunction
を定義し、例えば、それはこのfunction
をターゲットに、あなたのプロセスを起動後、3 threads
を実行して行うことができます:あなたはProcesses
の数、そして卵を生成することができます
def threader(process):
for _ in range(3):
threading.Thread(target=yourfunc).start()
def main():
# spawn whatever processes here to target threader
このコードは本当に助けになりました! このコードにキューを追加すると、処理またはスレッドをロックする必要がありますか? 私はプロセスをロックすると仮定私は3スレッドを停止しますか? –
@ atth3burger91それはあなたがしようとしていることによって異なります。 [documentation](https://docs.python.org/2/library/multiprocessing.html#exchanging-objects-between-processes)によると、「キューはスレッドとプロセスが安全です」ということはないので、同時にキューに追加する心配はありません。ただし、特定の順序で追加および取得する場合は、ロックを追加するか、キューに渡すオブジェクトに識別子を追加する必要があります。マネージャのdictsは軽量ではありませんが、使いやすくすることもできます。 – JAustin
printはスレッドセーフではないので、私の元の例はお粗末です。それぞれのprint文は、出力ストリームへの同時書込みを防ぐために 'lock.acquire'と' lock.release'文を持つべきです。 – JAustin