- 2006-12-07 (Thu) 3:18
- Python

引き続きPythonでマルチスレッドプログラミングという事で、5月頃にOS演習で実装したBounded Bufferを実装しました。
Bounded Bufferとは生産者スレッドと消費者スレッドがあり、お互いが有限のバッファでデータをやりとりする際に用いられるものです。「生産者消費者問題」とかでググると出てくると思います。
コードは以下のようになりました。
[code]
import os
import sys
from threading import *
class BoundedBuffer:
def __init__(self, maxlen):
self.cv = Condition()
self.datalist = []
self.maxlen = maxlen
return
def produce(self, item):
self.cv.acquire()
while len(self.datalist) == self.maxlen:
self.cv.wait()
self.datalist.append(item)
self.cv.notifyAll()
self.cv.release()
return
def consume(self):
self.cv.acquire()
while (len(self.datalist) == 0)
self.cv.wait()
ret = self.datalist.pop(0)
self.cv.notifyAll()
self.cv.release()
return ret
[/code]
条件変数がさっくりと書けてしまいます。今回は中の条件もいじりたかったので自分で書いたのですが、普通はQueueクラスを使えば十分間に合いそうです。
Similar Posts:
- Newer: 線形多段階法
- Older: PythonでMultiThreadServer
Comments:2
- okuji 06-12-07 (Thu) 4:36
-
こういう時はlistを使うより、collectionsに入っているdequeを使う方がいいと思います。listは頭からpopすると、O(n)なので(C++のvectorとdequeのような感じです)。ちなみにQueueは内部でdequeを使ってますね。
- kzk 06-12-08 (Fri) 8:16
-
コメント有難うございます。内部を見てみたところ確かにdequeを使うとO(1)なので、そちらの方がこの場合には向いていますね。手元では10万個ぐらいのバッファを使うプログラムになったのですが、かなり性能が改善されましたm(_ _)m
Trackbacks:0
- Trackback URL for this entry
- http://kzk9.net/blog/2006/12/pythonbounded_buffer.html/trackback
- Listed below are links to weblogs that reference
- PythonでBounded Buffer from moratorium
