@ymyzk です. camph.net は CAMPHOR- の Web サイトで, CAMPHOR- や CAMPHOR- HOUSE の説明や最新の活動状況を公開しています. 約1ヶ月でデザインと実装を行い, 昨年末 (2014/12/29) にリニューアルを行い, 以来少しずつアップデートを重ねながら運用を続けています.
この記事では camph.net で利用している様々な技術について紹介します. 新しく Web サイトの構築を考えている方の参考になれば幸いです.
@ymyzk です. camph.net は CAMPHOR- の Web サイトで, CAMPHOR- や CAMPHOR- HOUSE の説明や最新の活動状況を公開しています. 約1ヶ月でデザインと実装を行い, 昨年末 (2014/12/29) にリニューアルを行い, 以来少しずつアップデートを重ねながら運用を続けています.
この記事では camph.net で利用している様々な技術について紹介します. 新しく Web サイトの構築を考えている方の参考になれば幸いです.
この記事はCAMPHOR- Advent Calendar 2014の22日目の記事です.
こんにちは,yaitaimoです.
今回は,Macユーザな私の大好きなランチャーである,Alfredを更に便利にするためのAlfred Workflowsについてのお話です.
この記事はCAMPHOR- Advent Calendar 2014の21日目の記事です。
こんにちは、@morishin127です。
今日はPythonで処理中のぐるぐるを表示する方法を紹介します。
これです。
この記事は CAMPHOR- Advent Calendar 2014 5日目の記事です。
こんにちは @Shtr28です。自然言語処理の研究とかしてます。
今日は研究してる時に便利だった concurrent.futures モジュールを紹介します。
Future は並列計算のパターンのひとつです。
今回はテキストを使って機械学習するときによく使う ngram を Future で並列計算します!
日本語を形態素解析器 mecab で分かち書きして、一行ずつ ngram を計算します。
フルのコードはここ(gist)。
メインの並列化のコードはここ。
1 2 3 4 5 6 7 8 9 10 |
def multi_process(): # kgram に対して識別番号を順番にふるための dict kgram2id = defaultdict(lambda: len(kgram2id)) # 並列計算のプロセスプールを確保! with concurrent.futures.ProcessPoolExecutor(max_workers=4) as executor: # プールにプロセスが余ってたら sentences に sent2kgram を実行! for res_kgram in executor.map(sent2kgram, sentences): # 非同期に返ってくる計算結果に対して 副作用がある操作を実行! res_kgram = map(lambda x: kgram2id[x], res_kgram) return kgram2id |
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)で実行すると、
1 2 |
single_process: 218.09ms multi_process: 135.92ms |
実行時間が短くなりました!実際研究で使った時は File IO が絡んでて、もっと激的に効果がありました。Syntaxもシンプルですし asyncio より気軽に使えるんじゃないでしょうか。お試しあれ。フルのコードはここ(gist)。
明日は @yaitaimo の記事です。お楽しみに。
〜参考にさせてい頂いたサイト〜
python 3.4.2 標準ライブラリ 17.4. concurrent.futures – 並列タスク実行
python3のconcurrent.futures