Pythonのお勉強 Part72
!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 たくさんのファイルを3ステップで加工したい
一つずつやると時間かかるので、並列処理させる
全ファイルをステップ1処理 -> 全ファイルをステップ2処理、という感じ
それでかなりスピードアップはするけど、
ステップの継ぎ目部分で全体の完了を待つのが無駄
全体は待たずにファイル毎にどんどん先に進む並列処理を
簡単に書くモジュールある? >>748
処理がファイル間で独立しているならmultiprocessingモジュール
Unix環境ならxargsコマンドで足りる話にみえるけど concurrent.futuresモジュールのが書きやすいかもしれん
どっちも見てみて あんまりいいサンプルが見つからない
キモは、プロセスの実行に条件があるという点
file1-step1が完了してないとfile1-step2は実行できない
必要なプロセスを全部登録して実行させるとそんなことは考慮されないので、
どのプロセスが実行可能か依存関係を教えてやらないといけない モジュール使う分には単純だから公式ドキュメント読んで
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' step1とstep2でプロセスを分けずに全体を1つのプロセスにするということかな
実際にはそれぞれで別のexeファイルを実行するのでなかなか難しい 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なやり方は存在しない 何を言ってんだこいつは
プログラミング言語の前に国語をやり直せ
そうだな>>748を100万回読み直して相手に何が伝わってると思うか感想を述べよ >>752
>'step1.py Z; step2.py Z'
これは'step1-3.py Z’でよくない?
キャッシュされてもインタプリタ起動のオーバーヘッドはそれなりにかかるので >>755
なるほど
実際にはまだ何も並行化/並列化できてないという話なのか
>実際にはそれぞれで別のexeファイルを実行するのでなかなか難しい
だったら↑この思い込みを捨てることから始めたほうがいいよ
結局のところPythonで並行/並列化するなら以下の4択なので
具体的な処理内容とワークロードの特性を加味して適切なものを選んでね
1.非同期
2.マルチスレッド
3.マルチプロセス
4.非同期+マルチプロセス 結局、
proc1.exeをsubprocess.Popen()で並列処理
proc2.exeをsubprocess.Popen()で並列処理
proc3.exeをsubprocess.Popen()で並列処理
となっていたものを、
proc1.exe
proc2.exe
proc3.exe
を実行するbatファイルに移動させて、
batファイルをsubprocess.Popen()で並列処理で目的は達成できた
batファイルかー、という気もするけど、並列処理で依存関係を気にした例は見つからなかった
(並行処理なら普通) バッチファイルのことをbatファイルと書いているのは初めて見た マジか
"バッチファイル" 473,000
"batファイル" 134,000
だから少数派ではあるけど、22%くらいの勢力はあるのに
そもそも、batファイルを使った経験自体が少ないのでは >>758
テキストファイルの操作みたいだけど、そういうのは処理範囲を指定して同時に動かすんだよ。 >>760
batファイルという書き言葉は最近、発生しているようだけど、一般書籍でもマイクロソフトでもbatファイルとは呼んでいない。
日本語ではバッチファイル、英語ではbatch file。
バッチファイルを使ったことがないというのは、シェルスクリプトを使ったことがないというのと同じで、Pythonコードも動かいたことがないと思われてしまうレベル。 >>762
ステップは行という意味に思われるからやめた方がいい >>762
複数のファイルと書いてあったな。
並列化には担当するファイルを分けるなどいくらでも方法はある。
マルチプロセスの日本語訳が並列処理、マルチスレッドの日本語訳が並行処理だが、英語ではマルチという言葉で同時実行という言葉ではない。
同時実行という意味を付加しているのは日本語。 EXEファイルを二重起動とかPythonもバッチファイルも関係ねえな
実行ファイルを引数なしで実行するとか、シリアル前提処理を多重起動して、想定どおりにならないとか狂っんなw ID:poYagYhe0 は自作自演のネタ野郎だった >>763
batファイルでも別に普通じゃない?
拡張子batのファイルには違いないんだし
txtファイル、jpgファイル、mpgファイルと同じだよ テキストファイルの拡張子をtxtとしているのはWindowsの世界だけ
Windowsを使っていてバッチファイルを知らないなんて素人だろ >>770
拡張子は拡張子でしかない
JPEGのファイルの拡張子はjpegが本来の拡張子で、jpgはWindows、MS-DOSの拡張子は3文字までという仕様で発生したもの。
さらにWindowsのデフォルト設定だと拡張子を表示しないんだぜ?
何をどう勘違いしているのかな。 拡張子がhtmlだとhtmlファイル、拡張子がhtmだとhtmファイルだと呼ぶなら、単に無知をごまかしているだけ バッチファイルはマイクロソフトの命名のセンスが悪かっただけだが、バッチファイルと作っている会社が言っている名称を使うのが素直
拡張子が3文字だと思っている疑惑があるのと、UNIX、Linuxの世界では拡張子はあくまで目印にすぎない
ファイルが何のファイルかは少し読み込んで判断する
WindowsでUTF-8のテキストファイルを扱う場合は、テキストファイルにBOMという情報を先頭に書く
シェルスクリプトも1行目に自分自身の種類と何で実行するのかを書く どうでもいいことで盛り上がってんなww
batファイルってのは同じバッチファイルでも.cmdじゃなく.batだぞってこと
htmファイルも同じ
まあ個人的には.batファイルのようにドット付きでなら書くけどドット無しでは書かないな >>758
proc1.exeをsubprocess.run()
proc2.exeをsubprocess.run()
proc3.exeをsubprocess.run()
↑この一連を関数にまとめればbatファイルはいらない
それとまとめた関数は直接Popenじゃなくmultiprocessing経由で処理すれば
Poolを使う分だけオーバーヘッドが減る
あと処理内容次第だけどasyncio使って全部非同期ににしたほうが
コードは多少面倒でもリソースが減って速度も出る可能性もある Pool版も問題なく動いた
if __name__ == '__main__':
が要るのね 子供がエラー出てもなんも判らんのな
get() すると判るけど、マルチプロセスにならないので、デバッグ終わったら外す
グローバル変数経由で参照させようとしても見えないとか罠がいろいろ apply_async(func, args=(arg,))
の余計なコンマもなんじゃこれと思ったら、無いと動かないんだよな
そんなもんバグやがな グローバル変数が参照できるかどうかは処理系依存な気がするんだよな
Copy-On-Writeでプロセス増やしてたら普通に参照できる筈
そんな互換性の無いコードが書けていいのかとは思うけど さすがにこのレベルの基礎を押さえていない人は
自称Python初心者でなくても↓こちらのスレへどうぞ
>●関連スレ● 自称初心者は↓へ
>【まず1嫁】くだすれPython(超初心者用) その59
>https://mevius.5ch.net/test/read.cgi/tech/1689241721/ 要素1個のタプル 1,
要素0個のタプル ()
なんでやねん
コンマこそがタプルを表しているなら、コンマだけが空タプルの本質だろうに
冗長に書いて(,) でもエラーになる
コンマがタプルで括弧はおまけだけど空の時だけ例外ルール >>790
あのさ(1)だとタプルじゃなくてただ数値がカッコで括られてるだけと判別出来ないだろ >>792
要素数が変化しない空のシーケンスを表現するためにある
fが引数1個を取る関数、gが引数を取らない関数だとしたら
apply(f, (1,))とapply(g, ())
のようにempty tupleを使うのが理にかなってる SQLで書いてるクエリをSQLAlchemyでORMにしたいのに
全然出来んわ、半分諦めかけてる
なんかコツとかないんか? word1かword2かword3のいずれかがstrに含まれているかどうか
はどうやったらすっきり書けるだろう
内包表記なら書けるけど、
if (word1, word2, word3) in str
くらいの判りやすさが欲しい すぐに思いつかないようなゴルフが仮にできるとしても
関数化した方がわかりやすいとおもう any(w in str for w in words)で不満か? >>798
>>796 さんは「すっきり」と仰っていますが。
# 敢えて反語法で表現しました。 >>800
(word1 in str) or (word2 in str) or (word3 in str)
を、すっきり書きたいのですと。 list in str
を許容するように文法を変える
結果のリストが得られるので、
any(list in str)
みたいに使う >>796
ここで言うstrって変数じゃなくて型か? any([isinstance(x, str) for x in (word1, word2, word3)])
any(map(isinstance, (word1, word2, word3), [str]*3)) 関数一つかますしか無いだろうな
def find_words(list, str):
return [w in str for w in list]
print(any(find_words(['a', 'b'], 'bcde'))) 、pythonでWEBスクレイピングをしてるのですが、タスクスケジューラで動かすと画面が欠けます。
ログイン中だと問題なくでます。
なぜかサイズ指定しても効かないのですが、タスクスケジューラで登録して自動実行させてる方いませんでしょか? >>810
「ユーザーがログオンしているかどうかに関わらず実行する」が選択された場合、
タスクはセッション0のデスクトップが無い環境で実行される(Vista以降)
通常のブラウザでイスクレイピングをしたければ適当なアカウントにログインしていなければならない
またはヘッドレスモードのあるブラウザなら動きそうではあるがどうだったかな >>811
ありがとうございます。
ヘットレスモード試してみます。
まずはログインした状態でタスクスケジューラ起動とかが一番近道かもですね! >>796
s = set(str.split())
if {word1, word2, word3} & s != {}:
... >>796
ごめん間違えた
s = set(str.split())
if {word1, word2, word3} & s != set():
... 配列のインデックスが1じゃなく0から始まる利点て? 0の方がいろいろ合理的だけど、
printf(f'{count+1}')
とかやるよな
範囲を示す時に始点と終点よりも、始点と終点+1(次の要素の始点)の方が
便利なケースが圧倒的に多いけど、なんか怖いので愚直にやる >>813-814
スマソ、なんか Trueにならなくね?
>>> word1 = 'abc'
>>> word2 = 'def'
>>> word3 = 'ghi'
>>> sstr = 'aaabcddd'
>>> s = set(sstr.split())
>>> {word1, word2, word3} & s != set()
False
>>> s = set('zzzzzzz'.split())
>>> {word1, word2, word3} & s != set()
False
>>> >>815
Pythonって配列無いんじゃ?リストやろ
C言語系とかの配列的に添字が0から始まるのはメモリアドレスを計算する時に高速な為 1. {'sss'}.issubset({'s', 'ss', 'sst'})
2.
strings = ('miss')
ret = any([s for s in ('s', 'ss', 'ss') if s in strings])
3. filter(lambda s=s: s in strings, strings)
4.
strings = ('ss', )
is_in = strings in ('s', 'ss', 'sss') ヒント
画像情報 テレポート
エネルギー 瞬間にどう
観測結果論部あり
※情報とエネルギーを送れるのなら任意の波と線とHzを任意の場所で発生可能
上記の技術に脳内インプラントデータを対象者全身に送信で操り人形
地球外宇宙人もサイコパスが使用中
高度な科学を使用できていても自然環境も人間社会いも狡猾な者【人間を物として見る者】が圧勝
ガスライティング.ギャングストーカー.電磁波攻撃 等
現在の若者サイコパスで無い者は何%いるのかな?
地球派【マイクロ波聴覚効果】は違法でないので宇宙人が行っていても合法
別の惑星はテロに該当なので問答無用で戦争
マイクロ波は波の種類なので
X線でマイクロ波を起こしているので
お前に200回のx線を打ち込んだも理解できるでしょう
※5Gはミリ波で動的動作も追跡可能になるのでマイクロ波より便利
テラヘルツ波はミリ波と比べて現在不明なので研究中
何Hzの帯域は対象者周囲の状況に応じて変化していると思われるので
線種類 + 波種類 + 何hz + 使用w数 = 音波【音の高さ】? requests.get() したものに対して、
<meta charset= の内容を見てencodingを設定してくれる機能ってある? >>817
その条件では使えない
英文みたいに空白で単語が区切られている時に使える
部分一致はsuffix arrayみたいな重く複雑なsetが必要
ひょっとしたら何かエレガントな書き方があるのかもしれないが >>822
まずdecodeしないでmeta見れるの? apparent_encoding にするといいよという記事をよく見るけど、
encodingに困ってる時にapparent_encoding使うと悪化する
困ってない時は何もしなくていい
結局使い所が無い >>818
高級言語なのにそこにつっこむセンス
速度に影響するから知っておいても損はないけども
むしろ内部実装でいうとlistは配列ちがう? >>826
エンコーディングの推論って日本語だとうまく機能しないよな
結局決め打ちして試すしかない 決め打ちしなくても、meta読めばそれが正解なんだよな
答えが書いてあるのに推測しようとして失敗する charsetに嘘書いてある事もあるから
metaは参考程度 >>827
なんで配列がリストと同様だと思ったん? 「動的配列は配列じゃないリストだ」と言い張る人なんじゃね?
それか何か根本的な勘違いをしてるか
まあどうでもいいけど その辺の言葉の使い方は言語や人や実装によって違うからまずは定義をちゃんとして欲しいな 言語も何も指定せずにプログラム関連でリストというと、リスト構造を指すよな 基本情報も持ってないような奴はその辺のデータ構造としての配列とかリスト分かってないんだろ 大抵はリンクリストを指すのだろうけど動的言語あたりが好き勝手用語を解釈し始めて
動的配列を指すこともあるし一般的にモノが並んでいることをリストと言ったりもする
ややこしい時代になったもんだ データ構造に言及しない文脈なら一般的に一覧とかリストで済ますでしょ
PythonスレはVBAスレに並ぶ初心者が集うスレだからこんな議論が度々起きても仕方ない ごくごく一般的な言葉を環境特有の用語として使う馬鹿が悪い 数学なんかそんなんばっかり
わざとだろと思うくらい 俺の投稿GW以降初なんだが馬鹿の自演言い訳扱いにされてんの? >>833
配列そのものが連続したアドレスのメモリ領域のことだからな
動的にメモリを確保する場合は、型が後づけになるから配列と呼ぶの違和感があるのは仕方ない