前提・実現したいこと
python3.8
ubuntu20.04を使用しています。
executor.submit(m.process)では1回のみ動画を回していて、その動画から得られた結果からexecutor.submit(m.process)を動かしつつexecutor.submit(r.run)で動画の解析をしています。また、動画の解析が終わったら終了し、executor.submit(m.process)だけにしていきたいです。
executor.submit(m.process)は動画再生のため、1回の実行だけでよいのですがexecutor.submit(r.run)は動画の結果(count_image_pathは動画から得られた画像のパス)に応じて何度も実行する必要があります。解析するときだけ並列処理になるというプログラムを書くことはできますでしょうか。
申し訳ございませんが宜しくおねがい致します。
def process(self): # Defining world dimensions world_size = (720, 900) image_path ="/program/main/resize_map.jpg" #マップの読み込み image = cv2.imread(image_path) #スタート地点 agent = Agent(Position(720,75), scan_radius=0.60, possible_moves=30) #第1ゴール地点 goal = Goal(Position(588,218), sigma=math.sqrt(world_size[0]**2 + world_size[1]**2)) #描写 agent.draw(image) goal.draw(image) cv2.imshow('Output', image) cv2.moveWindow('Output', 1950, 100) cv2.waitKey(100) #ポテンシャル法による画像に点描写するプログラム navi = 0 args = self.arg_parse() confidence = float(args.confidence) nms_thesh = float(args.nms_thresh) CUDA = torch.cuda.is_available() num_classes = 80 print("Loading network.....") model = Darknet(args.cfgfile) model.load_weights(args.weightsfile) print("Network successfully loaded") if CUDA: model.cuda() #ここまでしか来ず、「進みますがターミナルに出力されません #whileループ内のループというのが無限ループ # ストリーム(Color/Depth)の設定 config = rs.config() #撮影した動画を読み込む config.enable_device_from_file('/48A9A14C31288186/12_2_thu.bag',repeat_playback=False) config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30) config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30) # ストリーミング開始 pipeline = rs.pipeline() profile = pipeline.start(config) align = rs.align(rs.stream.color) print("進みます") playsound('/home/limlab/program/voice/go_straight.mp3') try: #ゴールまで0.3以上の距離があるのでゴールに向かって点の描写が始まる while Position.calculate_distance(agent.position, goal.position) > 0.3: try: frames = pipeline.wait_for_frames() color_frame = frames.get_color_frame() depth_frame = frames.get_depth_frame() if not depth_frame or not color_frame: continue frames = align.process(frames) profile = frames.get_profile() #画像データに変換 color_image = np.asanyarray(color_frame.get_data()) depth_color_frame = rs.colorizer().colorize(depth_frame) depth_color_image = np.asanyarray(depth_color_frame.get_data()) #これ以降,点描写がされつつ、yoloによる認識が始まり認識した場合、count_image_pathが保存されます、
python3.8
1def main(): 2 if os.path.exists(count_image_path): 3 print("count_image_pathが存在するので削除します") 4 os.remove(count_image_path) 5 if os.path.exists(text_reading_image_path): 6 print("text_reading_image_pathが存在するので削除します") 7 os.remove(text_reading_image_path) 8 m = Main() 9 executor = concurrent.futures.ProcessPoolExecutor(max_workers=2) 10 executor.submit(m.process) 11 r_running = False 12 13 while True: 14 print("ループ") 15 # プロセスrが動作していなくて、プロセスmの情報ができたらプロセスrを起動 16 if not r_running and os.path.exists(count_image_path)== True: 17 r = Run_image() 18 executor.submit(r.run) 19 r_running = True 20 21 # プロセスrが終了したら、フラグを落す。 22 if os.path.exists(text_reading_image_path): 23 r_running = False 24 25 26 # プロセスmが終章したらループを抜ける 27 #if not r_running and #プロセスmの終了検知: 28 #break 29 30
で、しつもんはなんでしょうか
返信ありがとうございます。
また、拙い質問で申し訳ございません。
1つのプログラム内で並列処理をするしないを条件分岐したいと考えていますがどのように変えればいいでしょうか。そもそも、このうようなことは可能でしょうか。
質問文にそれを追記しましょう
今の質問文ではなにをしたいのかわかりません
質問の題名で「1つのプログラム内で並列処理をするしないを条件分岐したい」を書き、実現したいでその詳細を書いたつもりでしたが説明不足で申し訳ございません。
はじめは1つ目の関数だけ実行し、条件により1つ目と2つ目の関数を同時に起動し、2つ目の関数の処理が終わり次第終了し、1つ目の関数のみの実行に切り替えたいです。
特にエラーがでているということではないんですがなぜファイルが存在するのに並列処理に入らないのかわからない状態です。
回答2件
あなたの回答
tips
プレビュー