前提・実現したいこと
生成したDynamicModuleを並列処理させようとすると、以下のエラーメッセージが発生しました。
このエラーを解消したいと考えております。
発生している問題・エラーメッセージ
Process SpawnPoolWorker-1: Traceback (most recent call last): File "C:\AppData\Local\Programs\Python\Python37\lib\multiprocessing\process.py", line 297, in _bootstrap self.run() File "C:\AppData\Local\Programs\Python\Python37\lib\multiprocessing\process.py", line 99, in run self._target(*self._args, **self._kwargs) File "C:\AppData\Local\Programs\Python\Python37\lib\multiprocessing\pool.py", line 110, in worker task = get() File "C:\AppData\Local\Programs\Python\Python37\lib\multiprocessing\queues.py", line 354, in get return _ForkingPickler.loads(res) **ModuleNotFoundError: No module named 'dynMod'** ・ ・
該当のソースコード
# DynamicModule生成(モジュール名はdynMod) DynamicModule() # DynamicModuleインポート import dynMod # 並列処理数 pool = Pool(4) # 並列処理 list1 = pool.starmap(dynMod.ParaProc, multi_args)
■再現コード import types import sys def dynamicModule(Param): spam_module = types.ModuleType('spam', 'dynamic generated module') spam_class = """ def calculation(Num1, Num2): # 計算式 result = """ + Param + """ return result if __name__ == "__main__": calculation(1, 2) """ exec(spam_class, spam_module.__dict__) sys.modules['spam'] = spam_module return spam_module if __name__ == "__main__": from multiprocessing import Pool Param = 'Num1 * Num2' # DynamicModule生成 dynamicModule(Param) # DynamicModuleインポート import spam # 並列処理数 pool = Pool(3) # インプットパラメータ multi_args = ([2, 2], [2, 3], [2, 4], [2, 5], [2, 6], [2, 7]) # 並列処理 list_result = pool.starmap(spam.calculation, multi_args)
試したこと
・並列処理ではなく、実行すれば正常終了
・import dynModをDynamicModule()で生成するロジックに差し込んだが、同様のエラーが発生
・DynamicModule()で生成するロジックでrunpyをインポートし、再度dynModモジュールを読み込ませようとしたが、同様のエラーが発生
補足情報(FW/ツールのバージョンなど)
Python3.7
Windows10
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/05 09:04
2020/05/05 09:30
2020/05/05 11:13