【Pythonプログラミング】並列処理の基本を解説!マルチスレッド・マルチプロセスをconcurrent futuresで実装!

  Рет қаралды 44,095

Pythonプログラミング VTuber サプー

Pythonプログラミング VTuber サプー

Күн бұрын

Пікірлер: 53
@iKami-jv9ml
@iKami-jv9ml 2 жыл бұрын
並行、並列を社内でレクチャーする際に私はよく料理に例えています。 並行は1つのキッチン(プロセス)を複数の料理人(プログラム)が取り合って作業するので、一見速そうに見えるけど料理人が増えると普通の処理より返って実行時間が遅くなりがちです。 並列は1人の料理人に1つのキッチンが与えられるので処理がとても早くなります。ですがその分お金(リソース)をたくさん使うので注意が必要です。
@pythonvtuber9917
@pythonvtuber9917 2 жыл бұрын
コメントありがとうございます😊 料理の例え!すごく面白いし分かりやすいです!!!今後、並列処理を説明するときはそのアイディアを参考にさせてもらいます😉
@kurukuruteh
@kurukuruteh 2 жыл бұрын
並列処理、並行処理の違いをなんとなくでしか理解出来ていなかったので、最初の具体的な活用場面が凄い参考になりました🙏🙏🙏
@pythonvtuber9917
@pythonvtuber9917 2 жыл бұрын
ご視聴いただきありがとうございます😊 並列処理・並行処理 / マルチスレッド・マルチプロセス、と似ているのがあってややこしいのですが、この動画が理解のお役に立てていたら嬉しいです!!
@jimmyliaouwu
@jimmyliaouwu 2 жыл бұрын
I usually learn Python by official documents. But this tutorial and VTuber are really nice, thanks. 😀
@pythonvtuber9917
@pythonvtuber9917 2 жыл бұрын
thank you for watching☺️
@raba-340
@raba-340 2 жыл бұрын
windowsのコマンドを複数同時に処理させたくて、最大数を見ながらsubprocessを実行させるのを自作しちゃいましたが、 やっぱり作らなくてもありますよね
@pythonvtuber9917
@pythonvtuber9917 2 жыл бұрын
自作で作れちゃうの凄いです!!機会があれば、ぜひ少ないコードでサクッと書ける concurrent futuresも使ってみてください😉
@me-me-661
@me-me-661 2 жыл бұрын
最初の並列処理と並行処理の使い分け方の説明、わかりやすかったです。threadingとかもっと上手く使いたいなと思うのですが、どういうタイミングで使えばよいか迷います。
@pythonvtuber9917
@pythonvtuber9917 2 жыл бұрын
正直、Pythonの弱点という動画でも解説しましたが、Pythonという言語自体は並列処理に強みがある言語ではないので、「積極的に使う」というより「必要になった時に使う」みたいなイメージだと思います! Pythonの弱点 ▶︎ kzbin.info/www/bejne/fJm5h6yNrc2tlac
@こりんてつ
@こりんてつ 2 жыл бұрын
いつも勉強になる動画ありがとうございます! 公式ドキュメントから自分が探しているライブラリーを見つけるのが苦手です。。。 1つずつ中身を見てくしかないのは分かってるんですが、 苦手過ぎて、Python3エンジニア認定基礎の模擬試験に少し逃げちゃいました😅
@pythonvtuber9917
@pythonvtuber9917 2 жыл бұрын
ご視聴いただきありがとうございます! 公式ドキュメント読むのは英語で分かりにくかったり、専門用語が羅列してあると辛いですよね😵 時には逃げても良いと思います!気分がのってる時に勉強した方が効率がいいですからね😉
@koichirookutani2807
@koichirookutani2807 2 жыл бұрын
並列処理のプログラム作成で大変助かっております。 次に行いたいことは,、あるFUNC_N()内の結果変数を別のFUNC_M()に受け渡す方法があればお教えいただけませんでしょうか。一旦MAIN()へRESULTとして引き渡し別のFUNCに引き渡そうとしてますがエラーが出てうまくいきません。
@pythonvtuber9917
@pythonvtuber9917 Жыл бұрын
ご質問ありがとうございます! mainに結果を渡して、別の関数に渡すところでエラーが出力されるとのことですが、エラー内容はどのようなものでしょうか?
@ptptsoushu
@ptptsoushu 10 ай бұрын
とてもわかりやすかったです。かなり前の動画ですが、もし可能なら教えてください。pythonはインタプリタだからそもそも速度は速くないですが、pyinstallerなどでexe化したら高速化の効果が実感できるのでしょうか?
@pythonvtuber9917
@pythonvtuber9917 10 ай бұрын
exe化すると高速化するかどうかは、元のコードの処理内容に依存しますがpyinstallerの場合は起動に時間がかかるので高速化の効果はあまり実感できないと思います
@ptptsoushu
@ptptsoushu 10 ай бұрын
@@pythonvtuber9917 大晦日にお返事ありがとうございます。確かにpyinstallerで作ったアプリの立ち上がり遅いですね。 いつもわかりやすい動画ありがとうございます。23年8月からpythonの勉強始めたのですがすごく勉強になって助かります。これからもよろしくお願いします
@こいつあいつ
@こいつあいつ 2 жыл бұрын
プロセス間通信のもお願いします あと、asyncioのライブラリ
@pythonvtuber9917
@pythonvtuber9917 2 жыл бұрын
ご要望ありがとうございます!検討してみますね!
@michel_9830
@michel_9830 Жыл бұрын
わかりやすい解説ありがとうございます。 1つ質問なのですが、異なるスレッド・プロセス間で変数を共有することってできますか?
@pythonvtuber9917
@pythonvtuber9917 Жыл бұрын
プロセス間のメモリ共有はmultiprocessingのValueを使うとできた気がします。スレッド間はqueueを使えばできると思います!
@daichiishikawa2960
@daichiishikawa2960 Жыл бұрын
並行処理(concurrent processing) 待ち時間が長いような処理(Web API利用)について質問です Web API等が待ち時間が長い理由として APIにRequest してResponse を待つ時間があるからでしょうか??
@てるてるぼうず-t8n
@てるてるぼうず-t8n 2 жыл бұрын
もしかしてとは思いましたが CPUのコア数によって上限決まるんですね。 シングルコアだとそもそもワーカーは1ってことですね。 サプー先生はどこでこういう知識を身につけてるんです?学生時代?
@pythonvtuber9917
@pythonvtuber9917 2 жыл бұрын
コメントありがとうございます! 動画内でお話ししている知識や経験談は、全てお仕事をするようになってから身につけたものです!本やネットで知識をつけたり、仕事場の先輩から教えてもらったりして勉強しています😉
@lovePSP007
@lovePSP007 2 жыл бұрын
マルチスレッドも複数のworkerが処理することはあるのですか? 1:57 の図のように、マルチスレッド(並行処理)は、単一のworkerが処理する仕組みだと理解したのですが、マルチスレッドの引数にmax worker数を指定してきたので、複数workerがそれぞれ並行処理をしているのか疑問が生じています PS いつも分かりやすい動画でよく見てます👀
@pythonvtuber9917
@pythonvtuber9917 2 жыл бұрын
Pythonのマルチスレッドはおっしゃる通り並行処理で実態としては待ち時間を有効活用して外からみるとあたかも複数の処理を同時にやっているかのように見せています。このコード上で設定している「worker」は仮想的な作業者(外から見た時にあたかも複数の作業者がいるかのように見せている、その作業者)だと考えてもらえたらと思います。
@lovePSP007
@lovePSP007 2 жыл бұрын
@@pythonvtuber9917 なるほど、ありがとうございます!
@yakultloverjp
@yakultloverjp 2 жыл бұрын
ありがとうございます!
@pythonvtuber9917
@pythonvtuber9917 2 жыл бұрын
基本的な部分だけしか解説できていませんが、少しでも参考にしてもらえたら嬉しいです!
@KU-oz1mk
@KU-oz1mk 2 жыл бұрын
func1の中にwhileの無限ループがある場合、with文を抜けないのですか?実際はfunc1やfunc2にはそれぞれ無限ループで繰り返すことが多いですよね。例えばfunc1にソケット通信のクライアントで1秒周期でサーバー接続など
@pythonvtuber9917
@pythonvtuber9917 2 жыл бұрын
おっしゃる通りです!紹介している書き方だとwithは抜けないですね!
@こいか-w8c
@こいか-w8c 2 жыл бұрын
動画ありがとうございます!分かりやすい動画でめちゃめちゃ助かってます! 質問があるのでお時間ありましたら返信お願いします。自分はプログラミングを始めて間もない者です。 numpyを使い画像処理をしてある数値Aを出すプログラムを作りました。 例えば0.png〜10000.pngの画像に対し、マルチプロセスを使いそれぞれの画像の数値Aのデータを取得したいです。 for arg1,arg2 in zip([0, 2500, 5000, 7500] , [2500, 5000, 7500, 10000]):と4プロセスでマルチプロセスをし、プロセス内でfor i in range(arg1, arg2):と繰り返し、img = cv2.imread('~~'+str(i)+'~~...として画像データを読み込み計算することで、数値Aを3倍以上高速に計算することができました。 それぞれのプロセスで生成した、2500個の数値Aをプロセスの外に出力したいのですが、マルチプロセスのため、上手くできません。 executer.submit周りで、出力した数値Aの配列を順番に出力すると、結局0〜9999と順番にプロセスを処理してしまいます。 また、result()に出力しても最後の[7500, 10000]のデータだけが出力されてしまいます。 また、画像1枚毎に、globals()['A%s' % i] = Aとしてみましたが、上手くいきません。 どうにかして、プロセス内から外に[0, 2500], ..., [7500, 10000]それぞれの数値A配列を出力したいです。 形はリストでもnumpyarrayでも、iとAの組み合わせでもなんでも良いです。 (計算終了後に10000個全部まとめてAの値でソートして、その後にマルチスレッドで画像ファイル操作します) ある程度は検索してみたのですが、これ以上どう検索したら良いかも分からないので質問しました。 検索ワードでも良いので教えて頂きたいです。 長文失礼しました。
@こいか-w8c
@こいか-w8c 2 жыл бұрын
質問しておいて申し訳ないですが、解決しました! プロセス内からcsvファイルに出力して、それらを読み込みました。
@pythonvtuber9917
@pythonvtuber9917 2 жыл бұрын
自己解決できたようで何よりです!! 処理内容を全部理解できてないのですが、マルチプロセス間でのメモリ共有ができれば良いのかな??と思いました! ご参考 ▶︎ qiita.com/t_okkan/items/4127a87177ed2b2db148#%E5%85%B1%E6%9C%89%E3%83%A1%E3%83%A2%E3%83%AAshared-memory
@こいか-w8c
@こいか-w8c 2 жыл бұрын
@@pythonvtuber9917 返信ありがとうございます! 参考にします!! めちゃめちゃ助かります!!
@ebi-0343
@ebi-0343 2 жыл бұрын
今回もためになる〜〜 内容と直接は関係ないんですけど、if __name__ == '__main__': の部分を最後に書くのはなんでですか? 順番的には最初(import文の後ろ)にi f __name__ == '__main__': の部分を書いても動き...ますよね?🤯
@pythonvtuber9917
@pythonvtuber9917 2 жыл бұрын
ご質問ありがとうございます! 以下のように書くとエラーになります😉 なので、一番下に書きます! ============= import os if __name__ == '__main__': main() def main(): print(os.path)
@luke0804
@luke0804 2 жыл бұрын
pythonはモダンな言語ですが、基本的には逐次処理(上から順番に処理が行われる)で進んでいきます。 defやclassなどで定義した時点では何も起こらないように見えますが、実は「関数やクラスを定義する」という処理が、その行を通る時に裏で行われています。 ここまで考えると、main()と呼び出しているifのブロックはdef mainの下に置いていないと、まずmainという未定義の関数を呼び出している、と怒られてしまいます。そして、この順番は他の関数でも同様なので、結局エラーを避けるためには、定義を全て終わらせて処理が始まるポイント(他の言語でもエントリポイントなどと呼ばれる部分ですね)をファイルの一番最後に書く必要がある、ということになります!
@world-satellite-2525
@world-satellite-2525 2 жыл бұрын
PythonってGILの排他ロックがあるので、CPUバウンドな処理の場合、1スレッドでしか実行できず、処理の並列化は制限されますか?
@pythonvtuber9917
@pythonvtuber9917 2 жыл бұрын
動画内の3:16あたりで説明している通り、Pythonの場合はマルチスレッドを実行しようと思っても、(排他ロックのため)並列じゃなくて並行処理になりますね😉
@akrs4102
@akrs4102 2 жыл бұрын
すごくわかりやすい説明ありがとうございます。 1点質問なのですが、ProcessPoolExecutorの方だと if __name__ == '__main__': 無しでmain関数を呼び出すとエラーとなるのですが、このif文が無いとエラーになるのって何故でしょうか
@pythonvtuber9917
@pythonvtuber9917 2 жыл бұрын
ご質問ありがとうございます😊 おそらくなんですが、このProcessPoolExecutorの元になっている公式のmultiprocessingのページに「新たな Python インタプリタによるメインモジュールのインポートが、意図しない副作用 (新たなプロセスを開始する等) を起こさずできるようにしてください。次のように if __name__ == '__main__': を使用してプログラムの "エントリポイント" を保護すべきです」って書いてあるので、言語仕様上の制約だと思います! 参考▶︎docs.python.org/ja/3/library/multiprocessing.html#the-spawn-and-forkserver-start-methods
@akrs4102
@akrs4102 2 жыл бұрын
@@pythonvtuber9917 なるほど、他からimportされた場合に意図しない挙動を防ぐ為なんですね、ありがとうございます!
@yashiTaka0603
@yashiTaka0603 2 жыл бұрын
異常終了時は、後で指定して実行するようなことは できるんでしょうか?
@pythonvtuber9917
@pythonvtuber9917 2 жыл бұрын
ご質問ありがとうございます😊 質問の答えになっているかわかりませんが、異常終了はresult()で結果を取り出すときに発生するので、その行を通常の例外処理と同じようにtry-exceptで捉えて、その後の処理を実行することができると思います!
@Yamazae
@Yamazae 2 жыл бұрын
面白いですね
@pythonvtuber9917
@pythonvtuber9917 2 жыл бұрын
ありがとうございます😊
@debilman11
@debilman11 2 жыл бұрын
二人とも寝るのがお仕事
@pythonvtuber9917
@pythonvtuber9917 2 жыл бұрын
すやー😴
@KumamusiPudding
@KumamusiPudding 2 жыл бұрын
可愛い女の子にPythonを教わるとかいうあり得ない状況に脳が混乱する
@pythonvtuber9917
@pythonvtuber9917 2 жыл бұрын
😂 女性のプログラマーは少ないですから珍しいかもですね!
[Introduction to Python Class]  Carefully explain the basics of Python classes !! [For beginners]
24:33
Pythonプログラミング VTuber サプー
Рет қаралды 132 М.
Disrespect or Respect 💔❤️
00:27
Thiago Productions
Рет қаралды 39 МЛН
The IMPOSSIBLE Puzzle..
00:55
Stokes Twins
Рет қаралды 146 МЛН
Amazing remote control#devil  #lilith #funny #shorts
00:30
Devil Lilith
Рет қаралды 16 МЛН
ТЮРЕМЩИК В БОКСЕ! #shorts
00:58
HARD_MMA
Рет қаралды 2,3 МЛН
【Pythonプログラミング入門】デコレータを解説! 〜VTuberと学習〜【初心者向け】
20:40
【完全解説】Pythonを使った自動化例46選【業務効率化できること】
34:58
はやたす | Python・データサイエンスコーチ
Рет қаралды 220 М.
Disrespect or Respect 💔❤️
00:27
Thiago Productions
Рет қаралды 39 МЛН