質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Pythonista

Pythonistaは、iOS上でPythonプログラミングができる開発アプリです。さらに、Pythonの関数・変数などを自動で補完する便利なコードエディタや、PythonスクリプトをiOS上で多様な形で機能させる各種機能も内包しています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

2回答

833閲覧

pythonの並列化について

退会済みユーザー

退会済みユーザー

総合スコア0

Pythonista

Pythonistaは、iOS上でPythonプログラミングができる開発アプリです。さらに、Pythonの関数・変数などを自動で補完する便利なコードエディタや、PythonスクリプトをiOS上で多様な形で機能させる各種機能も内包しています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/12/09 10:42

前提

動画の全てのフレームのハッシュ値を取得し,hash_dict ={}にhash_dict[i] = ハッシュ値(iはフレーム番号)を入れるプログラムを書きました.

実現したいこと

この処理を並列化したいです.

発生している問題・エラーメッセージ

エラーは出てきませんが,全フレームの処理が終わってないのにプログラムが完了してしまいます.
例:8415フレームのうち3000フレームしか処理されない,5430フレームのうち1079フレームしか処理されない.

該当のソースコード

python

1import cv2 2import numpy as np 3import imagehash 4from PIL import Image 5from concurrent.futures import ProcessPoolExecutor 6 7def cv2pil(image): 8 ''' OpenCV型 -> PIL型 ''' 9 new_image = image.copy() 10 if new_image.ndim == 2: # モノクロ 11 pass 12 elif new_image.shape[2] == 3: # カラー 13 new_image = cv2.cvtColor(new_image, cv2.COLOR_BGR2RGB) 14 elif new_image.shape[2] == 4: # 透過 15 new_image = cv2.cvtColor(new_image, cv2.COLOR_BGRA2RGBA) 16 new_image = Image.fromarray(new_image) 17 return new_image 18 19def hash_image(image): 20 return imagehash.phash(cv2pil(image)) 21 # compute the hash of the image 22 23def main(): 24 # open the video 25 VIDEO_PATH = *** 26 video = cv2.VideoCapture(VIDEO_PATH) 27 28 # get the number of frames 29 num_frames = int(video.get(cv2.CAP_PROP_FRAME_COUNT)) 30 hash_dict = {} 31 32 # create a pool of processes 33 with ProcessPoolExecutor() as executor: 34 # process the frames in parallel 35 for i, frame_hash in enumerate(executor.map(hash_image, video.read()[1])): 36 print('Frame {} of {} has hash {}'.format(i, num_frames, frame_hash)) 37 hash_dict[i] = frame_hash 38 39 40 41if __name__ == '__main__': 42 main()

追加質問(答えていただけたら幸いです)

このコードを
def main():
if name == 'main':
main()
なしで実行するとなぜか実行できません.なぜですか

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2022/12/09 11:01

> 追加質問 関数定義のみになるから、です。
退会済みユーザー

退会済みユーザー

2022/12/09 11:05

def main():も消していますので,それは違うと思います.すみません
melian

2022/12/09 11:17 編集

はい、cv2pil() と hash_image() の定義だけになるから、です。つまり、def main(): 以降のインデントがそのままになっているからではないでしょうか。
退会済みユーザー

退会済みユーザー

2022/12/09 11:23

私の質問が悪いみたいです. 正しくは以下のようなエラーがでます Traceback (most recent call last): File "<string>", line 1, in <module> File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 116, in spawn_main exitcode = _main(fd, parent_sentinel) File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 125, in _main prepare(preparation_data) File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 236, in prepare _fixup_main_from_path(data['init_main_from_path']) File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 287, in _fixup_main_from_path main_content = runpy.run_path(main_path, File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\runpy.py", line 263, in run_path return _run_module_code(code, init_globals, run_name, File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\runpy.py", line 96, in _run_module_code _run_code(code, mod_globals, init_globals, File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\runpy.py", line 86, in _run_code exec(code, run_globals) File "c:\Users\username\Desktop\Projects\V2PC\tests\test.py", line 40, in <module> Traceback (most recent call last): File "<string>", line 1, in <module> Traceback (most recent call last): File "<string>", line 1, in <module> File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 116, in spawn_main for i, frame_hash in enumerate(executor.map(hash_image, video.read()[1])): File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\concurrent\futures\process.py", line 674, in map Traceback (most recent call last): results = super().map(partial(_process_chunk, fn), File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\concurrent\futures\_base.py", line 600, in map File "<string>", line 1, in <module> fs = [self.submit(fn, *args) for args in zip(*iterables)] File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\concurrent\futures\_base.py", line 600, in <listcomp> File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 116, in spawn_main File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 116, in spawn_main exitcode = _main(fd, parent_sentinel) Traceback (most recent call last): Traceback (most recent call last): File "<string>", line 1, in <module> File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 116, in spawn_main exitcode = _main(fd, parent_sentinel) File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 125, in _main prepare(preparation_data) File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 236, in prepare _fixup_main_from_path(data['init_main_from_path']) File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 287, in _fixup_main_from_path Traceback (most recent call last): File "<string>", line 1, in <module> File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 116, in spawn_main exitcode = _main(fd, parent_sentinel) File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 125, in _main prepare(preparation_data) File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 236, in prepare _fixup_main_from_path(data['init_main_from_path']) File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 287, in _fixup_main_from_path main_content = runpy.run_path(main_path, File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\runpy.py", line 263, in run_path return _run_module_code(code, init_globals, run_name, fs = [self.submit(fn, *args) for args in zip(*iterables)] Traceback (most recent call last): File "<string>", line 1, in <module> Traceback (most recent call last): exitcode = _main(fd, parent_sentinel) File "<string>", line 1, in <module> main_content = runpy.run_path(main_path, File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\runpy.py", line 263, in run_path File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\concurrent\futures\process.py", line 645, in submit File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 125, in _main File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 116, in spawn_main File "<string>", line 1, in <module> exitcode = _main(fd, parent_sentinel) File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 125, in _main File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 116, in spawn_main Traceback (most recent call last): Traceback (most recent call last): return _run_module_code(code, init_globals, run_name, File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\runpy.py", line 96, in _run_module_code self._start_queue_management_thread() exitcode = _main(fd, parent_sentinel) Traceback (most recent call last): File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 125, in _main prepare(preparation_data) Traceback (most recent call last): File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 116, in spawn_main File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\runpy.py", line 96, in _run_module_code exitcode = _main(fd, parent_sentinel) prepare(preparation_data) File "<string>", line 1, in <module> File "<string>", line 1, in <module> Traceback (most recent call last): File "<string>", line 1, in <module> File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 116, in spawn_main _run_code(code, mod_globals, init_globals, File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\runpy.py", line 86, in _run_code exitcode = _main(fd, parent_sentinel) File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 125, in _main _run_code(code, mod_globals, init_globals, File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\runpy.py", line 86, in _run_code File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 125, in _main exec(code, run_globals) exitcode = _main(fd, parent_sentinel) prepare(preparation_data) File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 236, in prepare File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\concurrent\futures\process.py", line 584, in _start_queue_management_thread File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 116, in spawn_main File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 125, in _main exitcode = _main(fd, parent_sentinel) File "<string>", line 1, in <module> exec(code, run_globals) prepare(preparation_data) File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 236, in prepare File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 236, in prepare File "c:\Users\username\Desktop\Projects\V2PC\tests\test.py", line 40, in <module> prepare(preparation_data) File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 236, in prepare File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 125, in _main File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 116, in spawn_main Traceback (most recent call last): _fixup_main_from_path(data['init_main_from_path']) self._adjust_process_count() File "<string>", line 1, in <module> prepare(preparation_data) File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 236, in prepare File "c:\Users\username\Desktop\Projects\V2PC\tests\test.py", line 40, in <module> _fixup_main_from_path(data['init_main_from_path']) File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 116, in spawn_main for i, frame_hash in enumerate(executor.map(hash_image, video.read()[1])): File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 287, in _fixup_main_from_path Traceback (most recent call last): File "<string>", line 1, in <module> File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\concurrent\futures\process.py", line 608, in _adjust_process_count File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 125, in _main File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 236, in prepare exitcode = _main(fd, parent_sentinel) File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 125, in _main main_content = runpy.run_path(main_path, _fixup_main_from_path(data['init_main_from_path']) File "<string>", line 1, in <module> _fixup_main_from_path(data['init_main_from_path']) File "C:\Users\username\AppData\Local\Programs\Python\Python38\lib\multiprocessing\spawn.py", line 116, in spawn_main _fixup_main_from_path(data['init_main_fr
退会済みユーザー

退会済みユーザー

2022/12/09 11:24

def main(): if name == 'main': main() を消すとともにインデントも正したうえで実行しています
melian

2022/12/09 11:46 編集

※ 解決した様なので削除
TakaiY

2022/12/09 11:59

このコメント欄は、整形もされないし折畳みもできないので、そういう情報は質問を編集して追記したほうがいいですよ。
guest

回答2

0

追加質問だけ。

動かしているのは、Windows ではないですか?
とすると、以下で説明されているとおりです。
https://superfastpython.com/multiprocessing-spawn-runtimeerror/

公式の説明もあります。
https://docs.python.org/ja/3/library/multiprocessing.html#multiprocessing-programming
これの、「メインモジュールの安全なインポート」のところです。

投稿2022/12/09 11:28

TakaiY

総合スコア12765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/12/09 11:32

ありがとうございます!! 仕様なのかと思い検索したのですが,出てこなくて困ってました...
guest

0

video.read()[1]でiterateしてるからです。1フレーム分の画像なので、これをiterateしても仕方ないです。num_frames分iterateしましょう。あとProcessPoolExecutorを使わなくても簡単に分かることなので、質問書いてる暇があったらベタ書きで試しましょう。

投稿2022/12/10 00:08

dameo

総合スコア943

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/12/10 03:17

ProcessPoolExecutorを使わないと処理時間がとんでもないことになるので,ProcessPoolExecutorを使いました. 今回のコードの場合,hash_image(video.read()[1])をreadできるだけ繰り返す(最終フレームまで)つもりで書いたのですが,間違っていますか?間違っているのであれば,正しいコードを教えていただけないでしょうか
dameo

2022/12/10 06:30

普通に小さい動画で調べれば分かりますが、全然とんでもないことになりません。
退会済みユーザー

退会済みユーザー

2022/12/10 22:54

実際にどんでもないことになったので質問をしているんです.どんな動画を想定して話されているんですか?
dameo

2022/12/10 22:59

小さい動画と言ってますが、あなたが調べた小さい動画を言ってもらえますか? あなたの間違ったコードでも終わるし、実際にフレーム画像を見てみたりしましたか? 何もしないで質問し、間違いを教えてもらっても素直に聞けないのでは、相手にする気にもなりませんよ
退会済みユーザー

退会済みユーザー

2022/12/11 09:21

imagehash.phash(cv2pil(image)),ここの部分の計算量が元々大きい上に画素数によって計算量が指数関数的に増加するんですよ... フルHDで3分くらいの動画あれば問題ないのですが,私は60fps,4000×3000で10分程度の動画を処理にかけているので,呑気に処理を待っていたら日が暮れます..(CUDAも無理なので..) なので,並列化しようと思いコードを書きました. 私が調べた小さい動画は,この動画を10秒に切り取ったものです.並列化していない状態での処理時間が1フレーム当たり約1.4秒かかっていたので,10分の動画を処理するのに必要な時間が単純計算で14時間になります.他にも似たような動画で同じ処理を行わないといけないため,仕方なく並列化しました. 「video.read()[1]でiterateしてるからです」この点はご指摘頂きありがとうございます.きちんとイテレータに置き換えたところ問題なく動作し,解決いたしました.ありがとうございます. 追加で質問なのですが,元のコードでも「例:8415フレームのうち3000フレームしか処理されない」のように,途中までは問題なく処理できていた理由は分かりますでしょうか.中途半端に処理が出来ていたため,原因を発見できず,質問させていただいた次第です. 「質問書いてる暇があったらベタ書きで試しましょう」 このような言い方ですとこちらもあまり気分が良くないためもう少し優しくしていただけますと幸いです.
dameo

2022/12/11 10:57

> 追加で質問なのですが,元のコードでも「例:8415フレームのうち3000フレームしか処理されない」のように,途中までは問題なく処理できていた理由は分かりますでしょうか.中途半端に処理が出来ていたため,原因を発見できず,質問させていただいた次第です. 追加で質問したいなら別途質問をあげて他の人に答えてもらってください。 分からない理由も分からないし、そもそも自分で調べる気はなさそうなところも頂けませんね。 > 「質問書いてる暇があったらベタ書きで試しましょう」 > このような言い方ですとこちらもあまり気分が良くないためもう少し優しくしていただけますと幸いです. 私は必要以上に優しく接しているつもりですよ。
dameo

2022/12/11 11:56

あ、急いでいたので前半のごちゃごちゃしてる部分を読み飛ばしてました。ここは私の質問に答えてたんですね。 画素数の多いのを選んでるのがおかしいだけです。別にハッシュ計算は画素数で指数関数的に増えたりしないものですが、sample mp4で検索すればすぐ3MBの動画が見つかります。1.4秒を600フレームでも840秒で終わりますけどね。質問する前に十分調べられる時間です。 デカいのを処理したいのはあなたの自由ですが、動作確認せずにデカいのを流し、小さいので「なぜか?」を調べることなく質問してるから優しく指摘されちゃってるんですよ。
退会済みユーザー

退会済みユーザー

2022/12/11 12:18

お手数をおかけしますが,初めから文章を読み直して頂いてよろしいでしょうか,先ほどから的外れなことばかりおっしゃられています. >sample mp4で検索すればすぐ3MBの動画が見つかります。1.4秒を600フレームでも840秒で終わりますけどね。 その処理にどういった意味があるのでしょうか?私は様々な動画で試した結果,全ての動画でエラーも吐かれずに処理が中途半端に終わってしまう原因を知りたいのです.sample mp4を処理しても結果は同じです. 入力データが大きくて動作確認に時間がかかってしまうなんて話は一ミリもしてません.
dameo

2022/12/11 12:23

> 的外れなことばかり どこだか見当も付きませんね。 > その処理にどういった意味があるのでしょうか? あなたのコードの動作確認という意味ですよ。 > エラーも吐かれずに処理が中途半端に終わってしまう原因を知りたい あなたのコードが間違っているからでしょう? 原因なんてそれを質問する前にすぐ調べられるのにあなたが怠ってると書いたつもりなんですが・・・
退会済みユーザー

退会済みユーザー

2022/12/11 12:28

小さい動画を処理しても,大きい動画を処理しても途中でエラーも吐かずに終わってしまうんですよ. それで何が分かるんですか. >あとProcessPoolExecutorを使わなくても簡単に分かることなので、質問書いてる暇があったらベタ書きで試しましょう。 簡単に分かることというのは,ハッシュ値のことですか?原因ですか? 自分の認識が正しいかどうか知るためにもこれに答えて頂けませんか
dameo

2022/12/11 12:51

小さい動画で並列化せずに流して正解を保存しておくのが普通です。最初は全フレーム画像ファイルで保存しておくくらいの慎重さが必要です。 その後大きい動画で時間を計測し、無理そうなら並列化のコードを試します。 その際、まずは小さい動画で並列化前の動作結果と並列化後の動作結果を比較し、正しいことを検証します。←ココ その上で大きい動画でうまく動かなかったなら、質問をするのが普通です。 あなたの質問は明らかにこのプロセスを経ていません。だからチクチクされちゃっているわけですよ。
退会済みユーザー

退会済みユーザー

2022/12/11 13:04

>小さい動画で並列化せずに流して正解を保存しておくのが普通です。最初は全フレーム画像ファイルで保存しておくくらいの慎重さが必要です。 正解というのはハッシュ値のことでしょうか,それともコード自体のことでしょうか. 全フレーム画像ファイルで保存して,それは何に使うのでしょうか.フレーム番号と紐づけられたハッシュ値が正しいかの確認でしょうか. >その後大きい動画で時間を計測し、無理そうなら並列化のコードを試します. 無理だったので並列化を試みました,これについては何度も言っているはずです. >その際、まずは小さい動画で並列化前の動作結果と並列化後の動作結果を比較し、正しいことを検証します。 dameoさんが言いたいことがやっと理解できました. 並列化前はきちんと動作しているか確認しろってことですよね? それは既に行っております.元々,すべてのフレームのハッシュ値が算出できる動作確認済みのプログラムがあり,それを改良して並列化しようと試みたところ,今回質問させていただいたような不具合が発生したのです. それについて,自分なりに調べてコードを手直ししましたが並列化を行うこと自体が初めてだったので,原因が分からずにいました. このサイトは技術について分からないところを質問する場所です.質問者に対して「こんなものも分からないのか,もっと試せ」と受け取られてもおかしくない表現をするのは適切ではないと思います.
dameo

2022/12/11 13:14

> 正解というのはハッシュ値のことでしょうか,それともコード自体のことでしょうか. 画像とハッシュ値ですね。 > 無理だったので並列化を試みました,これについては何度も言っているはずです. そこはプロセスの説明です。飛ばしてるところに心当たりはありませんか?ココって書いてるところとか・・・ > 並列化前はきちんと動作しているか確認しろってことですよね? 並列化前後で比較したかですね > それについて,自分なりに調べてコードを手直ししましたが並列化を行うこと自体が初めてだったので,原因が分からずにいました. 調査が全く足りていないと言っています。 > このサイトは技術について分からないところを質問する場所です.質問者に対して「こんなものも分からないのか,もっと試せ」と受け取られてもおかしくない表現をするのは適切ではないと思います やるべきことをやらないで質問したらチクチクされても仕方ないですよ。
退会済みユーザー

退会済みユーザー

2022/12/11 13:46

>画像とハッシュ値ですね. 並列化前のプログラムに元動画を10秒にカットした動画を突っ込んで,ハッシュ値とフレーム番号をcsvで保存してあります.これは,並列化後に中途半端に終わる手前のハッシュ値と比較して問題ないことを確認済みです. >並列化前後で比較したかですね. 並列化前は問題なく動作しているのに,並列化後では中途半端に動作が終わってしまう. これは比較ではないんですか?書き足したコードの部分の問題もしくは,書き足した部分が元のコードと競合?していると考えてそこについて調べ改良というプロセスは既に終わっています. >そこはプロセスの説明です。飛ばしてるところに心当たりはありませんか?ココって書いてるところとか・・・ >その際、まずは小さい動画で並列化前の動作結果と並列化後の動作結果を比較し、正しいことを検証します。←ココ 正しいことというのは,結果ですか,それともコードですか? 結果であれば,正しくない(途中までは問題なく動作するが,急に処理が終了してします)ことが確認できたため,原因を追究するために調査しました.それで分からなかったので質問しました. コードであれば,結果が異なる理由を調査するためにコードを確認しましたが,分からなかったので質問しました.
dameo

2022/12/11 13:52

> これは,並列化後に中途半端に終わる手前のハッシュ値と比較して問題ないことを確認済みです. executor.map(hash_image, video.read()[1])な限りありえません。嘘までついて何がしたいのやら・・・ > 並列化前は問題なく動作しているのに,並列化後では中途半端に動作が終わってしまう. 画像もハッシュも違いますよ > 正しいことというのは,結果ですか,それともコードですか? 所謂テストの結果が正しいことでコードの正しさを検証します > 結果であれば,正しくない(途中までは問題なく動作するが,急に処理が終了してします)ことが確認できたため,原因を追究するために調査しました.それで分からなかったので質問しました. だから調査や確認が足りてないって何度も言ってますよね? いい加減理解してください > コードであれば,結果が異なる理由を調査するためにコードを確認しましたが,分からなかったので質問しました. だから調査や確認が足りてないって何度も言ってますよね? いい加減理解してください
退会済みユーザー

退会済みユーザー

2022/12/11 14:16

>executor.map(hash_image, video.read()[1])な限りありえません。嘘までついて何がしたいのやら・・・ これは,並列化するために追加したコードです.元のコードは, ループごとにret,frame = video.read(),hash[frame_num] = hash_image(frame)の順に処理を行うことで,全フレームのハッシュ値を取得しています. 並列化でコードを改良したと何度も言っていますよね,その改良が誤っていることは自覚していますが,どこが間違っているのかが分からなかったんです.これについてまた,調査が足りないというかもしれませんが,それは関係ないですよね?𠮟りたいだけなら回答してこないでください.求めているのは叱責ではなく回答です. >だから調査や確認が足りてないって何度も言ってますよね?いい加減理解してください このサイトは質問者に対して,解決策や解決に至るまでの手順を回答する場です. たとえ質問者の調査等が不足していても,それを馬鹿にするような発言は適切ではありません. 足りないからなんですか?それを言うことで問題が解決しますか?そこでするべきなのは, 足りないと叱責するのではなく,手順を教えるですよね. >画像もハッシュも違いますよ これについては意味が不明です. 「並列化前のプログラムに元動画を10秒にカットした動画を突っ込んで,ハッシュ値とフレーム番号をcsvで保存してあります.これは,並列化後に中途半端に終わる手前のハッシュ値と比較して問題ないことを確認済みです」この文章をきちんと読んでください.中途半端に動作が終了する前までは,きちんと値もあっているんです.
dameo

2022/12/11 14:35

じゃあちゃんと叱責しましょうか・・・ あなたの甘えと我儘に他人を付き合わせるのはやめましょう。 あなたが理解できないのか理解できないフリをしているのかしりませんが、私はそんなことに興味ありません。 あなたの質問は能力不足以前に、あなたの甘えと怠惰が引き起こした産物です。 私が提示した普通のプロセスを経ていないからです。 まずは小さい動画で並列化前の動作結果と並列化後の動作結果を比較し、正しいことを検証しましょう。 質問前にすべき当たり前のことを怠らないようにしてください。
退会済みユーザー

退会済みユーザー

2022/12/11 14:45

ここは会社じゃないですよ.場違いですさよなら
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問