「並列アプリケーションから最大のパフォーマンスを得たい場合は、コンピューターの CPU と同じ数のプロセスを作成し、各プロセスでいくつかの (いくつの?) スレッドを作成する必要がある」という話を聞いたことがあります。
本当ですか?
このイディオムを実装するコードを書きました。
import multiprocessing, threading
number_of_processes = multiprocessing.cpu_count()
number_of_threads_in_process = 25 # some constant
def one_thread():
# very heavyweight function with lots of CPU/IO/network usage
do_main_work()
def one_process():
for _ in range(number_of_threads_in_process):
t = threading.Thread(target=one_thread, args=())
t.start()
for _ in range(number_of_processes):
p = multiprocessing.Process(target=one_process, args=())
p.start()
それが正しいか?私のdo_main_work
関数は実際に並行して実行され、GIL の問題に直面することはありませんか?
ありがとうございました。