Tuesday, 11 May 2010

Python thread

なんか、Python のthread って、

  インスタンス変数ににアクセスする時は必ずlockをかける

と言う感じの実装になっているらしい。

   def run(self) :
     global result
     total = 0
     while self.i < self.last :
       self.i=self.i+1
       total += self.i
     result[self.id] = total
     return

と、

   def run(self) :
     global result
     total = 0
     i = self.i
     last = self.last
     while i < last :
       i=i+1
       total += i
     result[self.id] = total
     return

だと、Core2Duo で 2 thread で動かす方が遅くなるのね。

  % time python thread1.py 1000001
  parallel
  sum 500001500001
  python thread1.py 1000001 0.52s user 0.21s system 130% cpu 0.562 total

  % time python thread1.py 1000000
  sequential
  sum 500000500000
  python thread1.py 1000000 0.43s user 0.02s system 100% cpu 0.447 total

  % time python thread2.py 1000001
  parallel
  sum 500001500001
  python thread2.py 1000001 0.20s user 0.09s system 128% cpu 0.227 total

  % time python thread2.py 1000000
  sequential
  sum 500000500000
  python thread2.py 1000000 0.16s user 0.02s system 101% cpu 0.180 total

thread.local() でも良いのかも知れないけど、使い方が良くわからないな。

No comments: