Doge log

Abby CTO 雑賀 力王のオフィシャルサイトです

2008-10-01から1ヶ月間の記事一覧

続Ruby libevent

テストをちょっと書いてみたら色々おかしかった。 githubに置いておこう。 GitHub - mopemope/rbevent: ruby extension library for libevent

Ruby libevent

rubyでlibeventを使うライブラリを書いてみた。 通常のeventも合わせてテスト全然してないお。 環境はruby1.9。1.8でも動くかな。 #include "ruby.h" #include <stdio.h> #include <sys/time.h> #include <event.h> VALUE mRubyEvent, mRubyEventConst, rb_cEvent, rb_cSignalEvent, rb_cTi</event.h></sys/time.h></stdio.h>…

pyeventでecho

ノンブロッキングのサンプル import event import socket import errno import signal def _read(sock): try: return sock.recv(1024) except socket.error, e: if e[0] == errno.EWOULDBLOCK: return None raise def start_client(sock): res = _read(sock)…

Pythonの言語仕様

[Python][書籍] インタプリタ で言語仕様ってねえんじゃねーの?みたいな話が出てる。 基本リファレンスが言語仕様という認識なんだけど。 日本語訳が曖昧でわかりにくいところもあるよねっていうだけで「言語仕様がない」という話ではないと思うのだが。あ…

pyeventでecho

使い方わかんないとか言う人向けサンプル (書きなぐりです) import event import socket def read(sock): msg = sock.recv(1024) sock.send(msg) event.read(sock.fileno(), read, sock).add() def accept(sock): conn, addr = sock.accept() event.read(c…

Pythonクイズ

>>> import [1] >>> class A(object):pass ... >>> def test(self): ... print "test" ... >>> a = A() >>> a.test = [2] >>> a.test > >>> a.test() test >>> b = A() >>> b.test() Traceback (most recent call last): File "", line 1, in AttributeError…

Pythonクイズの答え

http://d.hatena.ne.jp/mopemope/20081017/p1 >>> import types >>> class A(object):pass ... >>> def test(self): ... print "test" ... >>> a = A() >>> a.test = types.MethodType(test, a, a.__class__) >>> a.test > >>> a.test() test >>> b = A() >>…

Pythonクイズ

>>> 3.0/2 1.5 >>> 3.0??2 1.0 となるような ?? にあてはまる二文字を答えよ

局所的にクラスを拡張する

withを使ってなにか出来ないかずっと考えてたんだけどありきたりなアイディアしか浮かばなかった。 でもあまりwithをどうこうっていうのを書いてる人もいなかったので書いておく。 with句のブロック間のみクラスを拡張する。 from contextlib import context…

Pythonクイズの答え

http://d.hatena.ne.jp/mopemope/20081016/p1 >>> 3.0/2 1.5 >>> 3.0//2 1.0 切り捨て除算がある言語は珍しいのかな?と思って書いてみました。 id:morchinさん、id:odzさん回答ありがとうございました。 id:morchinさんの回答は強制型変換などさらに詳しく…

heapq

標準でないのかな??? なのでpythonから引っ張ってくる。 Arrayに突っ込む。 class Array def heappush(item) self.push(item) siftdown(0, self.length - 1) end def heappop lastelt = self.pop() if self.length > 0 returnitem = self[0] self[0] = la…

bisect, bsearch

pythonから引っ張ってくる class Array def insert_right(item, lo=0, hi=nil) if lo < 0 raise IndexError.new('lo must be non-negative') end if hi == nil hi = self.length end while lo < hi mid = ((lo+hi)/2).truncate if item < self[mid] hi = mid…

富山県民 id:yone098 スルーされてる?

わんくま同盟 ミスター富山県民ことid:yone098が出ないなんておかしいぞ!?

RubyInline

RubyInlineを使うとCを埋め込めるらしいので試してみた。 $:.unshift File.dirname(__FILE__) require 'rubygems' require 'inline' VERSION = '0.0.1' class KQueue inline do |builder| builder.include "<sys/event.h>" builder.include "<sys/time.h>" builder.include "<unistd.h>" builder</unistd.h></sys/time.h></sys/event.h>…

NeverBlockの話

ちょっと思うところがあってrubyはじめました。 eventletライクなものを作ってみようかなと思ってイチのイチからrubyを勉強中です。とりあえずrubyだとNeverBlockっていうのがあるようです。 http://steps.dodgson.org/?date=20080920基本の考え方はeventlet…

Fiberメモ

require 'fiber' def io_switch f = Fiber.current $h.add_watch(:f, proc{ $h.remove_watch(:f) f.transfer }) $h.switch end class Hub def initialize @process @wait = Hash.new end def add_watch(key,block) @wait[key] = block end def remove_watch(…

自作multiprocessingプログラムサンプル

別に2.6じゃなくても簡単に書こうと思えば書けるよねえ。 でmultiprocessingモジュールの中身はどうなってるのかって話があまり書かれてない感じだったので書いてみた。概略的なコードは以下。 import os import sys import time class Process(object): def…

Pythonクイズ(辞書の非破壊的操作)

Pythonクイズ(辞書の非破壊的操作) >>> d1 = {'a':1, 'b':2, 'c':3} >>> d2 = {'c':4, 'd':5, 'e':6} >>> print dict(d1.items()+d2.items()) {'a': 1, 'c': 4, 'b': 2, 'e': 6, 'd': 5} >>> d1 {'a': 1, 'c': 3, 'b': 2} >>> d2 {'c': 4, 'e': 6, 'd': 5} >…

RemoteManagerの件

http://d.hatena.ne.jp/a2c/20081008/1223403985 multiprocessing部はPEP8になってない部分が多かったり、ドキュメントが適当だったりする。 (python2.6で増えた部分は割りと適当なのかも。kqueueんところも最初すげー適当だったし) bm_server.py from mul…

Netty

http://twistedmatrix.com/pipermail/twisted-python/2005-January/009341.html 意外に古くからあるっぽい。

Spawningの話

一部で話題のSpawning Spawning · PyPI 速いだの遅いだのなんか揉めてたけどどうなったのか。とりあえず中でやってる事のメモ socketをbind,listenまでする(rangeで8回繰り返す意味がよくわからなかった) num_processの指定数分だけプロセスを作りにかか…

ディスクリプタパッシング自分用メモ

python2.6 親はメインのacceptに専念。 子プロセス側でecho処理。 from multiprocessing import _multiprocessing import os import socket import time class FDDispatchServer(object): def __init__(self): self.is_child = None def fork(self): pid = o…

なんとなく

ブロッキングコードのように書けるライブラリと同じようなものをrubyで書いたら.... Ruby1.9以降で greenlet→Fiberで代用。+αが必要 kqueue,epoll→なんかいい定番のラッパーがあればそれを で多分書けそうな気がするんだよなあ。 rubyをはじめる時期なのかも…

socketの置き換え

置き換えをサポートした。 socketモジュールとして動作する。 from mopenio.thread import threaded from mopenio.io import install_nio import socket install_nio() @threaded def handle_client(conn): data = conn.recv(8192) conn.send(data) conn.clo…

python2.6リリースメモ(挫折)

PEP以外の細かいメモ。 schedモジュール scheduleを行うモジュール。 スケジューリングする基準になる時間取得関数などを設定可能。 スケジューリングする際に、時間、優先度、関数、引数を渡す。 内部キューにためる。 runでスケジューラー起動。 キューに…

non blocking I/O ネットワークライブラリ

今作ってるやつ。 python2.6以降前提。 モジュール名募集! ブランド力が大事らしいのでmopenioになりました。 non blocking I/Oだけどブロッキングコードのように書ける。 コアはeventletとほぼ同じになった。。。。 (丸パクリ) from mopenio.thread impo…