私は言う – あなたは大きな変態です。 無限のファンタジー!
インチキメールの文言。
ちょっと笑ったので。
1000枚程度の画像ファイルをconvertで適当な処理をやる工程をpython3のsubprocessで
単純にforで回して
for file in files: subprocess.Popen([convertへのコマンド], cwd=dir)
みたいな感じをOSXでやると、メモリいっぱいまで食いつぶして気持ちいい爆速処理ができます。仮想8コア100%。CPU稼動率はっぴゃくぱーせんと! なんだか楽しくなってきます。
そんなに入らないぃぃぃ状態まで食わせるので、当然他の操作は出来ません。ファンがめったにない高速回転になるのが気持ちいい。回転数が下がったら処理が終わりみたいな感じ。
投げっぱなしなので、適当な手段で次の逐次処理に追い越されないようにしないといけませんが、OSXでは処理前ファイルと処理後ファイルの数を比較して、合わなかったら寝てろで止められます。書き出し中のファイルはカウントしないようです。
これをLinuxでやると予定通り、oom_killerに殺されてシステム自体が動作不能になります。
どこでも動く制限付きのマルチスレッドに変更せねば…。
ということで、
「フォルダ1」にtiffファイルが入っていて、処理済みのファイルを「フォルダ2」に書き出す処理。 def hage(x): subprocess.check_output(['convert'---x[n]を適当に当てはめてコマンドを形成--], cwd='./'--カレントディレクトリで走らせる決め打ち) def main(): todo_list = [] for file in files: todo_list.append(フォーループで回すのに使うはずだった変数一覧) # ここで読み込みファイルのフルパスと書き出しファイル名のリストを作るので順不同に処理されても問題なし p = Pool(いい塩梅なプロセス制限の数値) p.map(hage, todo_list)
check_outputのsubprocessがPool()個づつ回ります。
ここで、またPopenを使ってしまうと、戻りがないので、ひたすらぶっこまれて最初に戻るになります。
6.2MBのTiffファイルを200枚の処理で、単純にcheck_outputに投げると、1ファイルずつの処理になるので約280秒。Pool(8)ちゃんに回してもらうと、約60秒。
単純にPopenに投げたときより少しだけ速かったので、ちょっとびっくり。
食いつぶされても死なないようにOSXがなんかしてるオーバーヘッド的な何かがなくなり、論理コア数分(うちのは4コア。論理8コア)のプロセスしか使わないのでお気楽になるのだと思われます。
I.O DATA HDL-GT2.0 余裕の長寿命かと思ってたら、崩壊…。ほうかいwwww
一人で使ってるので、使用時以外は電源を切っていて、使うときに起動する感じで使ってました。
昨晩起動したら、なんかデグレちゃって、ああ、デグレか。今度こそ予備ディスクを使う日がやってきたか。と思いきや、前回デグレのときと同じく、いきなりリビルドを始めやがりました。
進行中のファイルは入ってないので、適当にリビルドしてくれ。前回のようにwと思って、帰ってきたら、赤ランプ全点灯。警告音鳴りっぱなし。
ずっといた人に聞いたら、出掛けてすぐくらいから鳴り続けていたということなので、リビルドを始めてから爆速で崩壊したようです。ほーかいwwww
smartを見てもこれと言って問題があるわけでもなく、なんか知らんけど、何かの拍子になんか起きてデグレードして、何かの拍子にリビルド開始、何かの拍子に崩壊。
何かが何かはまるでわかりません。
普段遣いのファイルや進行中のファイルは入れていないので、流用データが無くなって滅多にこないものは新規で作ることになる感じで済みます。
どうせ、そういう用途で、概ね半分くらいしか使ってないし、極端に古いものは捨ててるので、思い切ってこのままraid5からraid10に変更して、機械が完全に死ぬまでいじめ抜いて差し上げることにしました。
こんくらいの規模のraid5で割と売れたものなので専門業者さんは定番の復旧策があるようで、概ね妥当と思われる御値段で復旧可能ですが、なくなったものは諦めてまた作ればいいというイワオ方式で行くことにしました。
今更役に立つかどうかわかりませんが、
電源を切る。
最上段のHDDだけ残して、あとは全部抜く。
起動。
途中で赤ランプ点灯。警告音。ここで、statusボタンを押して警告音を殺して暫し待つ。
崩壊モードで起動しているので、192.168.0.200(←ココ重要)がアクセス先になります。
崩壊モードの管理画面に入れず。invalid なんたらエラーが出たら、最上段に残したHDDがハズレです。他のに入れ替えてやり直し。
崩壊モードで入れたら、諸諸設定してHDDを全部入れてraid再設定。
ここでOKすると、正常位に戻ってしまう(←ココ重要)ので、平時に設定したIPアドレスでアクセスします。
あとは、買ったときの新鮮な気持ちで全部やり直し。
※崩壊モードは最上段HDDに当たり外れがある(理由はわからん)。
※崩壊モードはアクセス先が平時とは変わる。
※崩壊モードを抜けると平時のアクセス先に戻る。
以上です。
デンノーintelligear WDRED 3TB×5 raid5
11/14 時間不明 1番(一番上)ディスク デグレード
11/15 20:00 ディスク交換・リビルド開始
11/16 20:00 進捗1%
11/17 20:00 進捗1%
11/18 20:00 進捗1%
11/19 20:00 進捗16%
11/20 20:00 リビルド完了
監視ソフトが出す進捗がリニアなのかどうかわかりません。
前回再構築時も3日くらい9%で止まって、最後の12時間くらいで完了。
120msもかかっていたvim(iterm2上)の起動を90msまで短縮した、たった一つの冴えたやり方的ななにか。
colorschemeを決めうちに変更。
そんだけ。
立派に作られたcolorschemeは各種のなにかに対応するため、ちゃんとしたスクリプトっぽい構成になっていますが、決まってしまえばめったに変更することがないので決め打ちに変更してしまいましょう。
なんだかんだいっても決め打ち数値を割り当てるだけの逐次処理は最強です。
せっかくなので、黒バック用の陰キャ全閉、見てるだけで陰気になる華やかさの破片もない普段遣いのものを晒しておきます。
もとはjellybeansだったはずなのですが、原型をとどめていません…。
何もかもが決め打ちなので、guiのみ。
"jellymod2 guionly hi clear syntax reset set background=dark let colors_name="jellymod2" hi! Normal guifg=#EEEEEE guibg=#000000 cterm=NONE gui=NONE hi! ColorColumn guibg=#000000 hi! Comment guifg=#888888 hi! Constant guifg=#DF6A5C cterm=NONE gui=NONE hi! Cursor guifg=#222222 guibg=#AAAADD hi! CursorColumn guibg=#1C1C1C hi! CursorLine guibg=#1C1C1C hi! CursorLineNr guifg=#AAAAAA cterm=NONE gui=NONE hi! DbgBreakPt guibg=#4F0037 hi! DbgCurrent guifg=#DEEBFE guibg=#345FA8 hi! Delimiter guifg=#668799 hi! DiffAdd guifg=#D2EBBE guibg=#405026 cterm=NONE gui=NONE hi! DiffChange guibg=#334455 cterm=NONE gui=NONE hi! DiffDelete guifg=#444444 guibg=#300000 cterm=NONE gui=NONE hi! DiffText guibg=#7697D6 cterm=NONE gui=NONE hi! Directory guifg=#7697D6 hi! ErrorMsg guifg=#FFAAFF guibg=#000000 cterm=NONE gui=NONE hi! FoldColumn guifg=#535D66 guibg=#111111 cterm=NONE gui=NONE hi! Folded guifg=#A0A8B0 guibg=#384048 hi! Function guifg=#FAD07A cterm=NONE gui=NONE hi! Identifier guifg=#C6B6EE cterm=NONE gui=NONE hi! LineNr guifg=#444444 cterm=NONE gui=NONE hi! MatchParen guifg=#FFFFFF guibg=#556779 hi! ModeMsg guifg=#999999 cterm=NONE gui=NONE hi! NonText guifg=#555555 cterm=NONE gui=NONE hi! Pmenu guifg=#DDDDDD guibg=#111111 hi! PmenuSel guifg=#DDDDDD guibg=#333333 hi! PreProc guifg=#8FBFDC cterm=NONE gui=NONE hi! PreciseJumpTarget guifg=#B9ED67 guibg=#405026 hi! Question guifg=#79AA6A cterm=NONE gui=NONE hi! Search guifg=#000000 guibg=#FFFF88 cterm=NONE gui=NONE hi! SignColumn guifg=#777777 guibg=#111111 hi! Special guifg=#44AA99 cterm=NONE gui=NONE hi! SpecialKey guifg=#774444 cterm=NONE gui=NONE hi! SpellBad guifg=#FFAAFF hi! SpellCap guifg=#7697D6 cterm=NONE gui=NONE hi! SpellLocal guifg=#2D7067 cterm=NONE gui=NONE hi! SpellRare guifg=#770066 cterm=NONE gui=NONE hi! Statement guifg=#8197CF cterm=NONE gui=NONE hi! StatusLine guifg=#111111 guibg=#666666 cterm=NONE,reverse gui=NONE,reverse hi! StatusLineNC guifg=#222222 guibg=#666666 cterm=NONE,reverse gui=NONE,reverse hi! StatusLineTerm guifg=#666666 guibg=#110033 cterm=NONE gui=NONE hi! StatusLineTermNC guifg=#666666 guibg=#222222 cterm=NONE gui=NONE hi! StorageClass guifg=#dd996F cterm=NONE gui=NONE hi! String guifg=#79AA6A hi! StringDelimiter guifg=#556633 hi! Structure guifg=#8FBFEE cterm=NONE gui=NONE hi! TabLine guifg=#666666 guibg=#000000 cterm=NONE gui=NONE hi! TabLineFill guifg=#000000 guibg=#000000 cterm=NONE gui=NONE hi! TabLineSel guifg=#AAAAAA guibg=#000000 cterm=NONE gui=NONE hi! Title guifg=#79AA6A cterm=NONE gui=NONE hi! Todo guifg=#333333 guibg=#FFFFAA hi! ToolbarLine cterm=NONE gui=NONE hi! ToolbarButton cterm=NONE gui=NONE hi! Type guifg=#FAD07A cterm=NONE gui=NONE hi! VertSplit guifg=#111111 guibg=#111111 hi! Visual guibg=#404050 hi! VisualNOS cterm=NONE gui=NONE hi! WarningMsg guifg=#FFFFFF cterm=NONE gui=NONE hi! WildMenu guifg=#FFAAFF guibg=#302028 hi! rubyClass guifg=#447799 cterm=NONE gui=NONE hi! rubyControl guifg=#8197BF cterm=NONE gui=NONE hi! rubyIdentifier guifg=#C6B6FE hi! rubyInstanceVariable guifg=#C6B6FE hi! rubyPredefinedIdentifier guifg=#DE5577 hi! rubyRegexp guifg=#EE55EE hi! rubyRegexpDelimiter guifg=#6600EE hi! rubyRegexpSpecial guifg=#CC6666 hi! rubySymbol guifg=#7697D6 cterm=NONE gui=NONE hi! link MoreMsg ModeMsg hi! link IncSearch Search hi! link Conceal Operator hi! link Error ErrorMsg hi! link Operator Structure hi! link TagListFileName Directory hi! link cFormat Identifier hi! link cOperator Constant hi! link cocoaClass objcClass hi! link cocoaFunction Function hi! link coffeeRegExp javaScriptRegexpString hi! link diffAdded String hi! link diffRemoved Constant hi! link elixirAtom rubySymbol hi! link erlangAtom rubySymbol hi! link erlangBIF rubyPredefinedIdentifier hi! link erlangDirective Statement hi! link erlangFunction rubyPredefinedIdentifier hi! link erlangNode Identifier hi! link htmlEndTag htmlTag hi! link htmlTag Statement hi! link htmlTagName htmlTag hi! link htmlBoldItalic Special hi! link htmlBoldUnderlineItalic Special hi! link htmlUnderlineItalic special hi! link htmlItalic special hi! link javaScriptRegexpString rubyRegexp hi! link javaScriptTemplateDelim Identifier hi! link javaScriptTemplateString String hi! link javaScriptTemplateVar StringDelim hi! link javaScriptValue Constant hi! link luaOperator Conditional hi! link objcClass Type hi! link objcDirective rubyClass hi! link objcMessageName Identifier hi! link objcMethodArg Normal hi! link objcMethodName Identifier hi! link objcStatement Constant hi! link objcSubclass objcClass hi! link objcSuperclass objcClass hi! link phpArrayPair Operator hi! link phpBoolean Constant hi! link phpFunctions Function hi! link phpNull Constant hi! link phpOperator Normal hi! link phpQuoteDouble StringDelimiter hi! link phpQuoteSingle StringDelimiter hi! link phpRelation Normal hi! link phpSuperglobal Identifier hi! link phpVarSelector Identifier hi! link pythonOperator Statement hi! link rubyConstant Type hi! link rubyFunction Function hi! link rubyGlobalVariable rubyInstanceVariable hi! link rubyInterpolationDelimiter Identifier hi! link rubyModule rubyClass hi! link rubySharpBang Comment hi! link rubyString String hi! link rubyStringDelimiter StringDelimiter hi! link vimOper Normal hi! link xmlDocTypeDecl PreProc hi! link xmlDocTypeKeyword PreProc hi! link xmlEndTag xmlTag hi! link xmlEntity Special hi! link xmlEntityPunct xmlEntity hi! link xmlEqual xmlTag hi! link xmlProcessingDelim xmlAttrib hi! link xmlTag Statement hi! link xmlTagName xmlTag hi! link EndOfBuffer Ignore
MacVimだと、このあとGUIの起動という大仕事があるので、この程度切り詰めても体感できるほどの効果はありません。