pingpong
erlangの軽量プロセスの説明に良く使われているpingpongの例をPython threadingで書いてみる。
# -*- encoding:utf-8 -*- """ """ from threading import Thread from Queue import Queue def ping(times, queue): """ """ for i in xrange(times): print "send ping, %d" % i queue.put(("ping", i)) queue.put(("finish", None)) def pong(queue): while True: (msg, arg) = queue.get() if msg == "ping": print "received:%d" % arg if msg == "finish": print "finshed" return if __name__ == '__main__': q = Queue() pingTh = Thread(target=ping, args=(10, q)) pongTh = Thread(target=pong, args=(q,)) pongTh.start() pingTh.start()
メッセージングには同期化キューを使っている。
2.5からはジェネレータにsendできるようになったので、マイクロスレッドで作ることもできそうだ。