threadの動作の違うよ。
Python でスレッドまわりを勉強してて、未解決メモ。
3つのスレッドが、それぞれ0から9まで数え上げるって言う、 簡単なものなのですが、 こんな感じで実装すると、 シェルから叩いた時には全部数え上げる前に終了してしまう。
#!/usr/bin/env python2.5
# vim: encoding=utf-8 :
import time
import thread
def run():
for i in range(10):
print i
time.sleep(1)
def main():
for i in range(3):
thread.start_new_thread(run, ())
time.sleep(1)
if __name__ == '__main__':
main()
でも、この実装だとちゃんと数え上げられた数字が全て表示される。
#!/usr/bin/env python2.5
# vim: encoding=utf-8 :
import time
from threading import Thread
class CountThread(Thread):
def run(self):
for i in range(10):
print i
time.sleep(1)
def main():
for i in range(3):
CountThread().start()
time.sleep(1)
if __name__ == '__main__':
main()
この挙動の違いはどうなってるんだろう?
本当に途中で終わっているのかテストしてみようと、 数え上げている数字をファイルに書き出してみると、 上の方だと、 Bus error とかエラー吐いて終了する。 どうやら、ホントに途中で終わってるっぽい。
threading.Thread の方が高水準なインターフェイスらしいので、 何か知らない処理が挟まっているんだろうと推測。 まだまだ勉強が必要ですな。
ちなみに、 threading.Thread のコンストラクタに target を渡すやり方で起動しても、 run をオーバライドした時と同じ動作をしてくれた。 ので、今のところは後者を使っていきたいと思います。
- Posted at:
- 2008/01/06 23:00:56
- 0 Comments
- 1 TrackBack
- Trackback:
- http://humming.via-kitchen.com/2008/01/06/2-threads-have-different-motion/trackback/
TrackBacks
[Python][Mercurial]巡回 - 常山日記
Pylons始めの一歩 [mac][PC]作り方が悪いだけなんだろうか [pylons]今日のpylonsメモ [Python][Python入門記]4.さぁPythonを書こう!(in Eclipse Europa) [コンピュータ] Mercurial [python]フォーマット文字列のフィールド幅 Adapter pattern Exercise #2-2Comments [OpenS
- Created at:
- 2008/01/07 12:04:31
Comments
まだ登録されていません。