Python 3でお手軽並列計算 ~concurrent.futures を使った ngram 抽出~

この記事は CAMPHOR- Advent Calendar 2014 5日目の記事です。

こんにちは @Shtr28です。自然言語処理の研究とかしてます。
今日は研究してる時に便利だった concurrent.futures モジュールを紹介します。

Future は並列計算のパターンのひとつです。
今回はテキストを使って機械学習するときによく使う ngram を Future で並列計算します!
日本語を形態素解析器 mecab で分かち書きして、一行ずつ ngram を計算します。
フルのコードはここ(gist)。

メインの並列化のコードはここ。

ProcessPoolExecutor(max_workers=4) が非同期に計算するプロセスを用意してくれます。
(おなじインタフェースで ThreadPoolExecutor もあります。が、CPython だと GIL というロックがかかるのであまり速度が上がりません。:sadpanda: )

あとは executor がよしなに非同期に sentences に対して sent2kgram を計算してくれます。
そして非同期計算が終わった順に executor がよしなに generator を返してくれるので、副作用がある操作(kgram2id[x])もここで出来ます。

青空文庫か取ってきた「吾輩は猫である」の冒頭に対して手元のMacBook Air(プロセッサ 1.7 GHz Intel Core i7, メモリ 8 GB, Python 3.4.2)で実行すると、

実行時間が短くなりました!実際研究で使った時は File IO が絡んでて、もっと激的に効果がありました。Syntaxもシンプルですし asyncio より気軽に使えるんじゃないでしょうか。お試しあれ。フルのコードはここ(gist)。

明日は @yaitaimo の記事です。お楽しみに。

〜参考にさせてい頂いたサイト〜
python 3.4.2 標準ライブラリ 17.4. concurrent.futures – 並列タスク実行
python3のconcurrent.futures

作って学ぶSwift/iOSアプリ入門

AppleがWWDC2014にてSwiftを発表してから2ヶ月近くが経ちました。OS X/iOSのアプリ開発に存在するObjective-Cの壁は取り払われ、より多くの人に馴染みやすい言語として現れたSwiftはコミュニティへの新たな開発者の流入を促し既存の開発者にもより安全でモダンなスタイルでの開発を可能にした点でとても歓迎されています。

既に沢山の入門文献や言語の特徴的な振る舞いを解説した文章が日本語で世に出回っていることは承知の上でありますが、最近のbeta 3で変更になった部分やこの2ヶ月で溜まってきたナレッジをもとにあらためて言語からアプリ開発まで一貫した解説記事を残したいと思いました。

本記事の構成はまず速習Swiftで文法の基礎的なところを話し、その後Todoアプリの作成を通じてクラスや構造体、UIKitを用いたアプリ制作の具体的な話をしていきます。読者は他言語を多少触ったことがある人を想定しているので行間が空いている箇所も多いとは思いますが最後までお付き合いいただければ幸いです。

続きを読む