Pythonのお勉強 Part72

0001デフォルトの名無しさん (ワッチョイ 03c5-hEBs)2023/12/27(水) 15:42:25.63ID:sVIMH2iW0
!extend:default:vvvvv:1000:1024
!extend:default:vvvvv:1000:1024
↑スレ立てる毎に減るので、減ってたら3つに補充すること。

・当スレにRubyのソースコード類を書くことを禁ず
・Ruby等、Pythonではないプログラミング言語での回答類・質問を書くのも禁止
・「Ruby では」「Rubyでは」「Rails」正規表現→「^クソチョンw$」をNGワード登録推奨
・エラーを解決したいときは、かならず
エラー文(勝手に省略orスクショうp等の横着禁止)と
おま環(Pythonのバージョン番号+OS名とバージョン+IDE名)を書け。

★Pythonのソースコードを5ちゃんに直貼はインデントが崩壊するので、
 ↓等のコードうp用サイトに貼ってきてくだしあ。(スクリーンショットをうpる「横着」禁止)
ttps://techiedelight.com/compiler/  Run Code機能あり。
ttp://ideone.com/      デフォ設定がCなので、Pythonするには言語種選択ボタン押下がピコ手間かも。
ttp://pastebin.com/     まずまずシンプル。
ttp://dpaste.com/      とてもシンプル。消えるまでの日数は十分長ーく指定のこと。

◇Pythonオフィシャルサイト http://www.python.org/
◇Pythonドキュメント https://docs.python.org/ja/3/
◇まとめwiki ttp://python.rdy.jp/
※前スレ
Pythonのお勉強 Part71
https://mevius.5ch.net/test/read.cgi/tech/1695168821/
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured

0744デフォルトの名無しさん (ワッチョイ ce01-w5n2)2024/05/05(日) 15:58:54.36ID:6HiO/5pi0

0745デフォルトの名無しさん (ワッチョイ eac1-c5DX)2024/05/05(日) 20:26:20.99ID:pt4LeM/F0
numpyのバージョンアップは怖い

0746デフォルトの名無しさん (ワッチョイ 0f60-+nJg)2024/05/06(月) 00:41:49.83ID:wa+Bl7jf0
どんぐりレベルが足りなくてかけない

0747 警備員[Lv.1][新芽] (ワッチョイ 0f60-+nJg)2024/05/06(月) 00:42:30.89ID:wa+Bl7jf0
レベルアップしたのか

0748デフォルトの名無しさん (ワッチョイ 7f54-wePh)2024/05/06(月) 11:03:33.16ID:poYagYhe0
たくさんのファイルを3ステップで加工したい
一つずつやると時間かかるので、並列処理させる
全ファイルをステップ1処理 -> 全ファイルをステップ2処理、という感じ

それでかなりスピードアップはするけど、
ステップの継ぎ目部分で全体の完了を待つのが無駄
全体は待たずにファイル毎にどんどん先に進む並列処理を
簡単に書くモジュールある?

0749デフォルトの名無しさん (ワッチョイ 7b3f-U069)2024/05/06(月) 11:41:41.15ID:6LmmIky40
>>748
処理がファイル間で独立しているならmultiprocessingモジュール
Unix環境ならxargsコマンドで足りる話にみえるけど

0750デフォルトの名無しさん (ワッチョイ 7b3f-U069)2024/05/06(月) 11:45:32.98ID:6LmmIky40
concurrent.futuresモジュールのが書きやすいかもしれん
どっちも見てみて

0751デフォルトの名無しさん (ワッチョイ 7f54-wePh)2024/05/06(月) 12:28:01.25ID:poYagYhe0
あんまりいいサンプルが見つからない

キモは、プロセスの実行に条件があるという点
file1-step1が完了してないとfile1-step2は実行できない
必要なプロセスを全部登録して実行させるとそんなことは考慮されないので、
どのプロセスが実行可能か依存関係を教えてやらないといけない

0752デフォルトの名無しさん (ワッチョイ 7b3f-U069)2024/05/06(月) 13:02:05.97ID:6LmmIky40
モジュール使う分には単純だから公式ドキュメント読んで
https://docs.python.org/ja/3/library/multiprocessing.html
https://docs.python.org/ja/3/library/concurrent.futures.html
それでファイル単位に並列にして
ファイルを引数にstep1/step2を関数化したら後は呼ぶだけよ

あるいは外部コマンド化して
cat paths | xargs -IZ -P $(nproc) sh -c 'step1.py Z; step2.py Z'

0753デフォルトの名無しさん (ワッチョイ 7f54-wePh)2024/05/06(月) 13:58:46.28ID:poYagYhe0
step1とstep2でプロセスを分けずに全体を1つのプロセスにするということかな
実際にはそれぞれで別のexeファイルを実行するのでなかなか難しい

0754デフォルトの名無しさん (ワッチョイ 6301-levy)2024/05/06(月) 17:25:03.16ID:JLRUeB280
for file in files:
 step1.exe file
for file in files:
 step2.exe file
という形じゃなく
step1.exe files
step2.exe files
という形で実行してるなら各exeがファイル毎に進捗報告やコールバックしてくれないと
ファイル単位で処理を先に進めるのは無理

前者でやってるならやりようがあるけど
ファイル単位じゃなくステップ単位にまとめるとスピードアップしたということなので
その原因を先に確認した上でやり方考えたほうがいい

性能向上のための並行/並列化は
具体的な処理内容やワークロードの特性によってアプローチが変わる
one size fits allなやり方は存在しない

0755デフォルトの名無しさん (ワッチョイ 6a79-1zLe)2024/05/06(月) 17:28:20.27ID:42NkMtxY0
何を言ってんだこいつは
プログラミング言語の前に国語をやり直せ
そうだな>>748を100万回読み直して相手に何が伝わってると思うか感想を述べよ

0756デフォルトの名無しさん (ワッチョイ 6301-levy)2024/05/06(月) 17:29:01.71ID:JLRUeB280
>>752
>'step1.py Z; step2.py Z'
これは'step1-3.py Z’でよくない?
キャッシュされてもインタプリタ起動のオーバーヘッドはそれなりにかかるので

0757デフォルトの名無しさん (ワッチョイ 6301-levy)2024/05/06(月) 17:41:01.35ID:JLRUeB280
>>755
なるほど
実際にはまだ何も並行化/並列化できてないという話なのか

>実際にはそれぞれで別のexeファイルを実行するのでなかなか難しい
だったら↑この思い込みを捨てることから始めたほうがいいよ

結局のところPythonで並行/並列化するなら以下の4択なので
具体的な処理内容とワークロードの特性を加味して適切なものを選んでね
1.非同期
2.マルチスレッド
3.マルチプロセス
4.非同期+マルチプロセス

0758デフォルトの名無しさん (ワッチョイ 7f54-wePh)2024/05/06(月) 19:12:43.39ID:poYagYhe0
結局、
proc1.exeをsubprocess.Popen()で並列処理
proc2.exeをsubprocess.Popen()で並列処理
proc3.exeをsubprocess.Popen()で並列処理
となっていたものを、
proc1.exe
proc2.exe
proc3.exe
を実行するbatファイルに移動させて、
batファイルをsubprocess.Popen()で並列処理で目的は達成できた

batファイルかー、という気もするけど、並列処理で依存関係を気にした例は見つからなかった
(並行処理なら普通)

0759デフォルトの名無しさん (ワッチョイ 9f5f-ggbZ)2024/05/06(月) 19:51:46.91ID:mwAWJr9U0
バッチファイルのことをbatファイルと書いているのは初めて見た

0760デフォルトの名無しさん (ワッチョイ 7f54-wePh)2024/05/06(月) 19:58:25.18ID:poYagYhe0
マジか
"バッチファイル" 473,000
"batファイル" 134,000
だから少数派ではあるけど、22%くらいの勢力はあるのに

そもそも、batファイルを使った経験自体が少ないのでは

0761デフォルトの名無しさん (ワッチョイ 9f5f-ggbZ)2024/05/06(月) 19:58:39.61ID:mwAWJr9U0
>>758
テキストファイルの操作みたいだけど、そういうのは処理範囲を指定して同時に動かすんだよ。

0762デフォルトの名無しさん (ワッチョイ 7f54-wePh)2024/05/06(月) 20:03:11.50ID:poYagYhe0
エスパーすげえ

0763デフォルトの名無しさん (ワッチョイ 9f5f-ggbZ)2024/05/06(月) 20:04:20.54ID:mwAWJr9U0
>>760
batファイルという書き言葉は最近、発生しているようだけど、一般書籍でもマイクロソフトでもbatファイルとは呼んでいない。

日本語ではバッチファイル、英語ではbatch file。

バッチファイルを使ったことがないというのは、シェルスクリプトを使ったことがないというのと同じで、Pythonコードも動かいたことがないと思われてしまうレベル。

0764デフォルトの名無しさん (ワッチョイ 9f5f-ggbZ)2024/05/06(月) 20:06:52.12ID:mwAWJr9U0
>>762
ステップは行という意味に思われるからやめた方がいい

0765デフォルトの名無しさん (ワッチョイ 9f5f-ggbZ)2024/05/06(月) 20:13:01.17ID:mwAWJr9U0
>>762
複数のファイルと書いてあったな。

並列化には担当するファイルを分けるなどいくらでも方法はある。

マルチプロセスの日本語訳が並列処理、マルチスレッドの日本語訳が並行処理だが、英語ではマルチという言葉で同時実行という言葉ではない。

同時実行という意味を付加しているのは日本語。

0766デフォルトの名無しさん (ワッチョイ 7f54-wePh)2024/05/06(月) 20:16:17.12ID:poYagYhe0
エスパーの言葉は為になる

0767デフォルトの名無しさん (ワッチョイ 9f5f-ggbZ)2024/05/06(月) 20:21:34.96ID:mwAWJr9U0
EXEファイルを二重起動とかPythonもバッチファイルも関係ねえな

実行ファイルを引数なしで実行するとか、シリアル前提処理を多重起動して、想定どおりにならないとか狂っんなw

0768デフォルトの名無しさん (ワッチョイ 9f5f-ggbZ)2024/05/06(月) 20:23:17.58ID:mwAWJr9U0
>>766
本人不在だったのか

0769デフォルトの名無しさん (ワッチョイ 9f5f-ggbZ)2024/05/06(月) 20:24:57.69ID:mwAWJr9U0
ID:poYagYhe0 は自作自演のネタ野郎だった

0770デフォルトの名無しさん (ワッチョイ f379-f5Wo)2024/05/06(月) 21:00:04.96ID:jGkweDD/0
>>763
batファイルでも別に普通じゃない?
拡張子batのファイルには違いないんだし

txtファイル、jpgファイル、mpgファイルと同じだよ

0771デフォルトの名無しさん (ワッチョイ 9f5f-ggbZ)2024/05/06(月) 21:40:01.57ID:mwAWJr9U0
テキストファイルの拡張子をtxtとしているのはWindowsの世界だけ

Windowsを使っていてバッチファイルを知らないなんて素人だろ

0772デフォルトの名無しさん (ワッチョイ 9f5f-ggbZ)2024/05/06(月) 21:47:03.75ID:mwAWJr9U0
>>770
拡張子は拡張子でしかない

JPEGのファイルの拡張子はjpegが本来の拡張子で、jpgはWindows、MS-DOSの拡張子は3文字までという仕様で発生したもの。

さらにWindowsのデフォルト設定だと拡張子を表示しないんだぜ?

何をどう勘違いしているのかな。

0773デフォルトの名無しさん (ワッチョイ 7f54-wePh)2024/05/06(月) 21:49:36.31ID:poYagYhe0
エスパーの思考は常人には判らない

0774デフォルトの名無しさん (ワッチョイ be2a-R/2N)2024/05/06(月) 22:24:52.88ID:BKncXC1b0
>>772 の中では噛み合った会話なのかな。

0775デフォルトの名無しさん (アウアウウー Sa1f-+nJg)2024/05/06(月) 22:42:13.79ID:okP0fzrBa
ほほいほいほい

0776デフォルトの名無しさん (ワッチョイ 9f5f-ggbZ)2024/05/06(月) 23:45:29.15ID:mwAWJr9U0
txtファイルなんて書くやついるのか?

0777デフォルトの名無しさん (ワッチョイ 9f5f-ggbZ)2024/05/06(月) 23:50:45.62ID:mwAWJr9U0
拡張子がhtmlだとhtmlファイル、拡張子がhtmだとhtmファイルだと呼ぶなら、単に無知をごまかしているだけ

0778デフォルトの名無しさん (ワッチョイ 9f5f-ggbZ)2024/05/07(火) 00:02:15.12ID:pgxJqkT00
バッチファイルはマイクロソフトの命名のセンスが悪かっただけだが、バッチファイルと作っている会社が言っている名称を使うのが素直

拡張子が3文字だと思っている疑惑があるのと、UNIX、Linuxの世界では拡張子はあくまで目印にすぎない

ファイルが何のファイルかは少し読み込んで判断する
WindowsでUTF-8のテキストファイルを扱う場合は、テキストファイルにBOMという情報を先頭に書く

シェルスクリプトも1行目に自分自身の種類と何で実行するのかを書く

0779デフォルトの名無しさん (ワッチョイ f379-f5Wo)2024/05/07(火) 00:24:22.86ID:UwVziOPZ0
なんかすげぇ
自分の中で世界ができあがってる…

0780デフォルトの名無しさん (ワッチョイ 1701-Jq+s)2024/05/07(火) 01:25:06.73ID:H+bNZbY80
どうでもいいことで盛り上がってんなww
batファイルってのは同じバッチファイルでも.cmdじゃなく.batだぞってこと
htmファイルも同じ
まあ個人的には.batファイルのようにドット付きでなら書くけどドット無しでは書かないな

0781デフォルトの名無しさん (ワッチョイ 1701-Jq+s)2024/05/07(火) 01:49:44.68ID:H+bNZbY80
>>758
proc1.exeをsubprocess.run()
proc2.exeをsubprocess.run()
proc3.exeをsubprocess.run()
↑この一連を関数にまとめればbatファイルはいらない
それとまとめた関数は直接Popenじゃなくmultiprocessing経由で処理すれば
Poolを使う分だけオーバーヘッドが減る

あと処理内容次第だけどasyncio使って全部非同期ににしたほうが
コードは多少面倒でもリソースが減って速度も出る可能性もある

Pool版も問題なく動いた

if __name__ == '__main__':
が要るのね

0783デフォルトの名無しさん (ワッチョイ 7f54-wePh)2024/05/07(火) 14:13:11.88ID:Ik+FWYJJ0
子供がエラー出てもなんも判らんのな
get() すると判るけど、マルチプロセスにならないので、デバッグ終わったら外す
グローバル変数経由で参照させようとしても見えないとか罠がいろいろ

0784デフォルトの名無しさん (ワッチョイ 7b21-U069)2024/05/07(火) 14:44:49.52ID:G2cFB2bJ0
Python関係なく基礎技術知らなすぎるんだろうけど
https://docs.python.org/ja/3/library/multiprocessing.html#multiprocessing-listeners-clients
たぶんこのへん誤読してる
他のモジュールでも同じような仕組みはあるから読み替えて

0785デフォルトの名無しさん (ワッチョイ 7f54-wePh)2024/05/07(火) 14:51:36.53ID:Ik+FWYJJ0
apply_async(func, args=(arg,))
の余計なコンマもなんじゃこれと思ったら、無いと動かないんだよな
そんなもんバグやがな

0786デフォルトの名無しさん (ワッチョイ bed6-w0ma)2024/05/07(火) 15:53:24.89ID:wj0nk6OJ0
それは要素が1個のタプルだ

0787デフォルトの名無しさん (ワッチョイ 7f54-wePh)2024/05/07(火) 15:55:19.18ID:Ik+FWYJJ0
グローバル変数が参照できるかどうかは処理系依存な気がするんだよな
Copy-On-Writeでプロセス増やしてたら普通に参照できる筈
そんな互換性の無いコードが書けていいのかとは思うけど

0788デフォルトの名無しさん (ワッチョイ 2601-c3oD)2024/05/07(火) 16:00:55.95ID:1eoADVhQ0
さすがにこのレベルの基礎を押さえていない人は
自称Python初心者でなくても↓こちらのスレへどうぞ

>●関連スレ● 自称初心者は↓へ
>【まず1嫁】くだすれPython(超初心者用) その59
>https://mevius.5ch.net/test/read.cgi/tech/1689241721/

0789デフォルトの名無しさん (ワッチョイ 2601-c3oD)2024/05/07(火) 16:02:36.17ID:1eoADVhQ0
>>788>>785宛ね

0790デフォルトの名無しさん (ワッチョイ 7f54-wePh)2024/05/07(火) 16:11:14.75ID:Ik+FWYJJ0
要素1個のタプル 1,
要素0個のタプル ()

なんでやねん
コンマこそがタプルを表しているなら、コンマだけが空タプルの本質だろうに
冗長に書いて(,) でもエラーになる
コンマがタプルで括弧はおまけだけど空の時だけ例外ルール

0791デフォルトの名無しさん (ワッチョイ 177c-0EWD)2024/05/07(火) 19:25:27.35ID:pe1yL5GL0
>>790
あのさ(1)だとタプルじゃなくてただ数値がカッコで括られてるだけと判別出来ないだろ

0792デフォルトの名無しさん (ワッチョイ 8b5b-HBr6)2024/05/07(火) 19:43:11.21ID:JFPI5Q+n0
>>790
要素数ゼロのタプルって何か意味あるん

0793デフォルトの名無しさん (ワッチョイ 6301-c3oD)2024/05/08(水) 00:49:45.86ID:Y9XLt/8j0
>>792
要素数が変化しない空のシーケンスを表現するためにある
fが引数1個を取る関数、gが引数を取らない関数だとしたら
apply(f, (1,))とapply(g, ())
のようにempty tupleを使うのが理にかなってる

0794デフォルトの名無しさん (ワッチョイ be34-HBr6)2024/05/08(水) 01:07:25.23ID:cM7EHH5y0
>>793
なるほど
ありがとう

新着レスの表示
レスを投稿する