pythonでthreadingとmultiprocessing

Python vs Clojure – Evolving « Best in Classをみてて、「ほう」となったので、手元のmacbookで。

t_seq.py

def count(n):
    while n > 0: n -= 1

count(100000000)
count(100000000)

t_thread.py

from threading import Thread

def count(n):
    while n > 0: n -= 1

t1 = Thread(target=count,args=(100000000,))
t1.start()
t2 = Thread(target=count,args=(100000000,))
t2.start()
t1.join()
t2.join()

t_mprocessing.py

from  multiprocessing import Process

def count(n):
    while n > 0:
        n -= 1

t1 = Process(target=count,args=(100000000,))
t1.start()
t2 = Process(target=count,args=(100000000,))
t2.start()
t1.join()
t2.join()

結果

$ time python t_seq.py;time python t_thread.py;time python t_mprocessing.py

real    0m17.032s
user    0m16.886s
sys 0m0.067s

real    0m37.139s
user    0m29.756s
sys 0m23.039s

real    0m8.777s
user    0m16.973s
sys 0m0.083s

Clojureのほう

user=> (defn countdown [n] (when (pos? n) (recur (dec n))))

#'user/countdown
user=> user=> (time (doall (pmap countdown (repeat 2 100000000))))
"Elapsed time: 8164.085 msecs"
(nil nil)

Essential AQLAlchemy

読みやすかった。これ読めばoverviewが大体つかめる。というか、engine,session,metadataの関係がつかめると理解が進む。

ProductName Essential Sqlalchemy
Rick Copeland
Oreilly & Associates Inc / ¥ 3,356 ()
通常1~3週間以内に発送

  • Sessionクラスはsessionmakerで作る。
  • metadata,engineのbound,unbound
  • generative query interface
  • 1:N,N:Mrelationsの指定の仕方
  • sessionの使い方
  • Elixir,SQLSoup

TopHatenar

調べ物してたら、tophatenarの自分のランキングにぶつかった。

blogopolisの区画も割り当てられてた。

blogopolis

「プログラミングHaskell」の読書会

今週末に「プログラミングHaskell」の読書会があります。

  • 日時: 2010年1月16日(土) 13:00~17:30
  • 場所: 静岡市産学交流センター 演習室 1 (http://www.hanjyou.jp/)
  • 地図: http://www.hanjyou.jp/map.html

ProductName プログラミングHaskell
Graham Hutton
オーム社 / ¥ 2,940 ()
在庫あり。

LinkStation 1.0TB LS-CH1.0TL

macbookが二台になったので、Time Machineの環境を揃えることにした。

ProductName BUFFALO ネットワーク対応HDD LinkStation 1.0TB LS-CH1.0TL

バッファロー / ¥ 22,050 (2009-05-02)
在庫あり。

  • timemachineの設定をonにする
  • AFPのチェックボックスをonにする
  • ユーザーを作成する
  • macアドレスはethernetのものを
    • このmacについて -> 詳しい情報

「世界一たのしい論理思考のレッスン」

一時間もかからずに読める。論理的とはどういう事か?

ProductName 世界一たのしい論理思考のレッスン エリカとギギの不思議な冒険
小野田 博一
ソフトバンククリエイティブ / ¥ 1,260 ()
在庫あり。

  • 論理とは真実とは別物
  • あることが正しくても、それが正しいことが証明されないうちは正しくない
  • 絶対的な正しさと相対的な正しさ
  • 100%の確実な結論を導きだすのが演繹。結論を導き出す思考のうち演繹以外のものを帰納

「容疑者ケインズ」を読んだ

少し経済のほうにも寄っておこうというか、マクロな視点はいろいろ役に立つので。

国全体の企業部門の設備投資の総量は利子率だけで決定するという仮定とか面白い。

ProductName 容疑者ケインズ (ピンポイント選書)
小島 寛之
プレジデント社 / ¥ 1,200 ()
在庫あり。

  • 投資需要が決まると、家計部門の貯蓄の総額がその投資と同じ額になる
  • 格差社会における所得移転が有効需要を作り出す
  • 貨幣は決断の留保に用いることができる
  • リスクとは確率論を総動員することで制御できるものであり、不確実性は確率がわからないから手の打ちようのないもの
  • エルスバーグのパラドックス
  • ジニ係数でバブルの状態を評価する
  • ノイジートレーダーの行動の合理性
  • 確率とは「論理的な推論のプロセスで得られる数値」

さて、リスクとは確率論を総動員することで制御できるものであり、不確実性は確率がわからないから手の打ちようのないものであるならば、リードオプティマイゼーションはリスクマネジメントの範疇でやらんと駄目だよなとか思った。

ProductName 不確実性のマネジメント 新薬創出のR&Dの「解」
桑嶋 健一
日経BP社 / ¥ 1,680 ()
在庫あり。

不確実性っていうのは、ターゲット探索とかHTSあたりにしかあらわれてはいけないのだと思う。

既存のSQLiteデータにSQLAlchemyでアクセスする

多数の化合物のファイルはSMILES形式でsqliteのデータベースにしておくと、あつかいやすいのだけど、たまにさくっとアクセスしてゴニョりたいときにsqliteでSQL文発行してとかめんどくさかったりする。

で、SQLAlchemy使うとpythonの対話環境で使えてそのままpybelとかに持っていけるので便利なんだけど、いちいちマッピングしなくても良いらしい。

create_engineでsqliteのファイルを指定して、reflectをTrueにすればよい。

from sqlalchemy import *

db = create_engine('sqlite:///test.db')
metadata = MetaData(bind=db, reflect=True)
table = metadata.tables['table_name']

このdrkcoreのファイルをつかって、タイトルを抜き出してみる。

>>> execfile("satest.py")
>>> stmt = entries.select()
>>> result = stmt.execute()
>>> for row in result:
...   print row.title
... 
blogを変えてみた
卓次郎商店でつけ麺
かど乃やで黒びしおラーメン

らくちん。

ProductName Essential Sqlalchemy
Rick Copeland
Oreilly & Associates Inc / 2719円 ( 2008-06 )


4章くらいまで読んだ。データの永続化用にsqlalchemy使えるようにしとくと仕事が非常に楽になりそうなので、ちゃんと読む。

「ひらめきの設計図」を読んだ

ホンダの三代目社長の考える「ひらめき」とは。

ProductName 「ひらめき」の設計図
久米 是志
小学館 / ¥ 1,785 ()
通常3~5週間以内に発送

最初の方と、最後の創造と仏教との関連付けあたりが面白かったが、多少くどく感じた。多少読みやすくして、ビジネス本みたいにすれば良いのかも。

  • 創造とは誰も知らないところへ自力でたどり着く行為
  • ゲッツェルスの創造プロセス
    • 最初の洞察
    • 浸透
    • 発酵
    • 啓示
    • 検証
  • 創造にあたってはことを始める前にきちんとしたステップを踏んで「よくよく考える」
  • 勝兵はまず勝ちて而る後に戦いを求め、敗兵はまず戦い而る後に勝ちを求む
  • 相似象を追求することで原因解明の鍵を探す
  • 客体的反省と主体的反省
  • 六波羅蜜と創造体験
    • 布施、持戒、忍辱、精進、禅定、智慧
  • 言語世界の思考から抜け出して対象の有様を言語思考を通さずに直接心が受け止める境地
  • 因 縁 果

Haskellで鯡数

数の子が好き。数の子のあんま入ってない松前漬けは認めない派です。年始は、松前漬けの数の子で、日本酒やってた。

そんなわけで、鯡数というものを思いついたのでHaskellで。

import System.IO.UTF8 as U

unfold p h t x | p x = []
               | otherwise = h x : unfold p h t (t x)

int2bin = reverse . unfold (==0) (`mod`2) (`div`2)

kazunoko :: [Int] -> String
kazunoko [] = ""
kazunoko (s:xs) | s == 1    = '魚' : (kazunoko xs)
                | s == 0    = '非' : (kazunoko xs)
                | otherwise = error "not binary"

nishin :: Int  -> String
nishin = kazunoko . int2bin

main = do U.putStrLn $ nishin 2010

unfoldはプログラミングHaskellから。この本いいです、マジ。

ProductName プログラミングHaskell
Graham Hutton
オーム社 / ¥ 2,940 ()
在庫あり。

さて実行

$ runhaskell nishin.hs 
魚魚魚魚魚非魚魚非魚非