前提・実現したいこと
複数の並列処理を入れ子構造で動かしたい。
一様分布の乱数を任意の回数処理するのを任意の回数行う
具体的イメージ:ランダム性のあるレース(ネズミの競争)を6レース分並列処理すること
レーサーの数は3とする。
###目的
複数の並列処理を入れ子構造で動かし、なるべく短時間で処理を行えるようにしたい。
知りたい事
下記コードが進行不可能な理由。←解決
下記コードを動かす改善方法。
他の有効な並列演算方法はあるかどうか。
daemonic processesとは何か。
追記:プロセッシングしてスレッディングすれば解決の可能性があるかもしれないとの事なので、サンプルコードを組んでいただけると助かります。
自身でもやってみます。
###環境
google cocolaboratory
発生している問題・エラーメッセージ
エラーメッセージ AssertionError: daemonic processes are not allowed to have children
該当のソースコード
Python
1ソースコード 2 3import pandas 4import random 5from multiprocessing import Pool 6 7#####一様な乱数に従って任意回数思考した後、着順を返す関数の定義##### 8def try_def(try_times): 9 count = 3#count:レーサーの数 10 #要素数:countの乱数を生成 = ネズミがゴールするまでにかかった時間(ラップタイム) 11 rap_time_list = list()#リストとして初期化 12 for i in range(count): 13 rap_time_list.append(random.uniform(30,60))#30~60(秒)の乱数をリストに追加。 14 #rap_time_listをデータフレームにし、0列目にラップタイムを持つデータフレームを作成。 15 df1_df = pandas.DataFrame(rap_time_list) 16 #上記データフレームにレーサー番号をつけたいので、indexを付与。 17 df1_df = df1_df.reset_index() 18 #0列目のラップタイムをソートして数字の小さい順(ゴール早かった順)にソート。 19 df2_df = df1_df.sort_values(by=0) 20 #レーサー番号もindexとして追従してソートされているので、利用して順位を取る。 21 for i in range(count): 22 race_result = [df2_df.iat[i,0] for i in range(count)] 23 return race_result 24 25#####レースを任意回数分(race_times回)行って結果リストを作成する関数の定義##### 26def race_def(race_num): 27 if __name__ == '__main__': 28 race_times = 600 29 initial_num_list = list(range(race_times)) 30 with Pool(processes=4) as p_para1: 31 race_result_list = p_para1.map(func=try_def, iterable=initial_num_list) 32 return race_result_list 33 34#実行したいプログラム 35if __name__ == '__main__': 36 initial_num_list2 = list(range(6)) 37 with Pool(processes=6) as p_para2: 38 race_result_list_2 = p_para2.map(func=race_def, iterable=initial_num_list2) 39print(race_result_list_2) 40 41
調べたこと
並列演算コードの書き方など
入れ子構造で並列演算しているサイトを探したが見つからなかった。
補足情報(FW/ツールのバージョンなど)
環境:google cocolaboratory
プログラミング初めて1周間程度の知識しかないので、
すみませんが、わかりやすくお願いできましたら幸いです。
よろしくお願い致します。
回答3件
あなたの回答
tips
プレビュー