2017年11月07日

M/M/sの窓口理論とsimpy

うん、難しい数学の話はよくわからんので、無し。(´・ω・`)
工学屋としてはいいから結果と道具を寄越せ、理屈は任せるスタンスで。
(ある程度は理解しないとあかんけどねぇ・・。)

んで、何かというと WebSphereのコネクションプールとか、スレッドプールとかの
キューイングネットワークの設定するときによく使われる窓口理論なんだけど式がややこしいあれ。
なんとか過程とか分布とかいわれても統計学やってないとさっぱりだと思う。
ならばシミュレーションしてみよう。
理屈はよくわからんが、どのぐらい必要かわかればよいのだ(ぉ

(1)pythonを用意しよう
(2)pip install simpy

あとはsimpyのチュートリアルとにらめっこして、youtubeのチュートリアルを見て
コネコネしてみる。

・コネコネしていてわかったこと

  シミュレーション単位はミリ秒でやったほうがよい。少数秒でやるとpythonの処理の遅延でうまくシミュレートできない。
  
  random.expovariate(1.0/transactionTime) の意味は 収束させたい数(transactionTime)の逆数を引数に入れる。
  間隔が指数分布になっていると到着率がポアソン分布になるので、結果がマルコフ過程に\(^o^)/ウボア

  リソースの獲得待ちはwithで
          with self.res.request() as req:
               yield req

  時間を消費するのを待つところ
    yield env.timeout(generate_timimg)

  このgenerate_timimgの扱いがよくわかってない(´・ω・`)
  これも指数分布にしていいのか、なんでもいいのか、固定値なのか、で結果変わります。

  15分分シミュレーションするなら、以下のように(ミリ秒単位)
  env.run(until=1000*60*15)  # 15分シミュレーション(unit=msec)
  
珍しく備忘録だな、こりゃ。(゚Д゚)


posted by koteitan at 11:30| Comment(0) | python | このブログの読者になる | 更新情報をチェックする

2017年03月02日

SQLite3 小技 fetchall()

SQLiteは便利ですよねぇ。
辞書では物足りないが、いちいちclass定義するのもなんだかな、という時とか
中断データ作る時とか、色々便利。:memoryにしておけばファイルも作らなくていいから、
集計とかにもいいですよね。

エクセルなのにエクセルで集計できんレイアウトになってたりしても
python+xlrd+SQLite3でど根性集計もできる。脱線した。

で、技というか 1カラムしかselectしない時は、いちいちタプルで渡してくれなくてもいいので

c.execute("select filepath from master")
row =[str(item[0]) for item in c.fetchall()]

こんな感じでタプルを解除してしまえば、

for r in row:
  func(r)

みたいな感じで後続が楽、という話さ。

検索結果がA,B,Cとした場合、[(u'A',),(u'B',),(u'C',)] と帰ってきてしまう(タプルの配列になる)ので、
['A','B','C']と入れ替えてるだけです。(タプル外して、unicodeも解除)

fetchallできないような巨大な応答とかはコツコツカーソルを動かして頑張るしかないですが。


参考リンク

続きを読む
posted by koteitan at 14:12| Comment(0) | python | このブログの読者になる | 更新情報をチェックする

2016年09月10日

pyQt メモ(イベントの接続)

evernoteにメモしてたんだけど、やっぱ公開しないとな。
こっちもたくさんの公開blogとか参考にさせてもらってるんだしね。
慣れた人には当たり前なのだろうけど、ね。

#ImageBoxのイベントを上書きして設定
self.ImageBox.mouseDoubleClickEvent=self.mouseDoubleClickEvent

Dialog->Panel->QGraphicsViewってのっけたUI作る時って、
Dialogを継承して、メンバにpanelやらくっつけるってやるでしょ。
そしたらイベント定義できるのがDialogになるけど、そこでのdoubleclickedを
ハンドリングしてもコンポーネントの隙間のところのダブルクリックしか反応しない。
全体とか、広い部分で反応してくれよ、ってのを調べてたらこんな簡単だったでござる。

後から見直してみると、これImageBox側が必要としている
mouseDoubleClickEvent()の処理(superを含む)が呼ばれなくないかなぁ・・。
何も実装されていない場合はいいかもしれんけど、
めんどくさがらずにちゃんとサブクラス作ったほうがいいのだろうか。
posted by koteitan at 12:07| Comment(0) | TrackBack(0) | python | このブログの読者になる | 更新情報をチェックする