前提
Anacondaにてconda仮想環境を構築したうえで、Anaconda Prompt から実行しています。
Pythonのバージョンは3.9.15です。
(追記:OSは Windows 10 で、Anacondaのバージョンは22.11.1です。
Anaconda Prompt で $ activate env1
してconda環境に移ったうえで実行しています)
CPUバウンドなタスクを速く処理すべく、multiprocessingモジュールのPoolクラスを用いて、実行ファイルとは別のモジュールの関数内でマルチプロセスを実装しています。
ただ、その別モジュールを import
して関数を実行すると、無数のエラーが間断なく発生し続けてしまいます。
また、実行ファイルじたいのプロセスを繰り返してしまいます。
実現したいこと
実現したいことは、次のとおりです。
- エラーが発生しない
- 実行ファイル(
sample.py
)のプロセスを繰り返さない(重要)
非常に困っております。どうかよろしくお願いいたします。
実行コマンドとエラーメッセージ
bash
1$ python sample.py 2hello 3hello 4hello 5hello 6hello 7hello 8# 無数のエラーメッセージ 9hello 10hello 11# 無数のエラーメッセージ 12hello 13# 無数のエラーメッセージ 14hello 15# 無数のエラーメッセージ 16hello 17hello 18# 無数のエラーメッセージ 19hello 20# 無数のエラーメッセージ 21# こんなのがずっと続きます
該当のソースコード
Python:sample.py
1import mymodule 2 3print('hello') 4mymodule.main()
Python:mymodule.py
1from multiprocessing import Pool 2import time 3import random 4 5def slow_task(n: int): 6 """2~3秒かかる遅い処理""" 7 seconds = random.uniform(2, 3) 8 time.sleep(seconds) 9 print(f'slow task {n}') 10 11def main(): 12 with Pool(5) as pool: 13 results = pool.map(slow_task, list(range(10))) 14 15if __name__ == '__main__': 16 main()
補足情報
なお、$ python mymodule.py
というようにモジュールをそのまま実行すれば正常にマルチプロセスがなされます。
bash
1$ python mymodule.py 2slow task 0 3slow task 4 4slow task 2 5slow task 3 6slow task 1 7slow task 5 8slow task 7 9slow task 8 10slow task 6 11slow task 9
回答1件
あなたの回答
tips
プレビュー