Home > Python > PythonでBounded Buffer

PythonでBounded Buffer

  • 2006-12-07 (Thu) 3:18
  • Python
  • hatena button
  • hatena count
  • save this page del.icio.us

引き続き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:

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

Comment Form
Remember personal info

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

Home > Python > PythonでBounded Buffer

お薦め本
広告
Archives
Categories

Return to page top