Tag Archives: Python

mtimeの修正はos.utime

/bin/touchと同じことをするos.touch()があるかとリファレンスを探しても見つからず。
結局、os.utime()だとわかるまでに10分ほどかかった。
Googleではノイズだらけで全然ダメだし。

関係ないけれど、前からきになってはいたんだけれど、 ja.pastebin.ca のページがたくさんヒットする。
僕の環境ではこのサイトを表示すると、Firefoxがクラッシュしてしまう。
特定のサイトを検索結果から取り除くFirefox Add-Onとかないかなあ、探してみよう。
…あっという間に見つかった。CustomizeGoogle

Python2.6は2.5よりもけっこう速いし、-OOはけっこう効く

web.pyで作った単純なWEBサイトをunittestを使ってテストしていて気づいた。

1000個のユニークURLへアクセスするテストを3回繰り返した結果の平均

(2.6=2.6.1、2.5=2.5.4 on CentOS5.2)

  • 2.6は約6%、2.5よりも速かった。
  • 2.5でも2.6でも、-OOオプションを付けて起動すると約8%速くなった。
  • 2.5(-OO無し)と2.6(-OO有り)では約12%、2.6の方が速かった。

The History of Python

Python’s Design Philosophyより

If the implementation is hard to explain, it’s a bad idea.

If the implementation is easy to explain, it may be a good idea.

このフレーズは前にもどこかで読んだ気がするけれど、実感すること多し。

あ、定額給付金もそうだな。

SimpleXMLRPCServerはpathが”/”か”/RPC2”じゃないと404を返す

Apacheでできているリバースプロキシをlighttpdに移行する設定を書いていて困った。

Apacheと同じように設定してみると、書き換え後のURLでバックエンドにリクエストしていないように見える。

調べてみると、lighttpdのmod_rewriteは$HTTP["url"]の内側では無効になるということらしい。

http://trac.lighttpd.net/trac/wiki/Docs%3AModRewrite

NOTE: url rewriting does not work within a $HTTP["url"] conditional. http://forum.lighttpd.net/topic/1092#3028

でもURLでしか区別のつかないリクエストをどうしてもバックエンドで受けたい。いまさらユーザに見えるURLを変えることができないし。

バックエンド側ではPythonのSimpleXMLRPCServerで作ったもの。ソースを見てもどこにもURLをいじるところはない。そういえば、URLは意識したこと無いなあ。

で、探して探して見つけた。

[ python-Bugs-1473048 ] SimpleXMLRPCServer responds to any path

SimpleXMLRPCRequestHandlerのソースを見ると、

class SimpleXMLRPCRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
	"""Simple XML-RPC request handler class.
	Handles all HTTP POST requests and attempts to decode them as
	XML-RPC requests.
	"""

	# Class attribute listing the accessible path components;
	# paths not on this list will result in a 404 error.
	rpc_paths = ('/', '/RPC2')

	def is_rpc_path_valid(self):
		if self.rpc_paths:
			return self.path in self.rpc_paths
		else:
			# If .rpc_paths is empty, just assume all paths are legal
			return True

	def do_POST(self):
		"""Handles the HTTP POST request.
		  Attempts to interpret all HTTP POST requests as XML-RPC calls,
		  which are forwarded to the server's _dispatch method for handling.
		  """

		# Check that the path is legal
		if not self.is_rpc_path_valid():
			self.report_404()
			return

なるほど。最初からソース見ればよかった。

SimpleXMLRPCRequestHandlerを継承したクラスで、is_rpc_path_validを継承して解決。

なんだか、達成感。

Using Python and Stompserver to Get Started With Message Queues

Using Python and Stompserver to Get Started With Message Queues

実践的なチュートリアル。

stomp.pyを使う。

MQ,Python,STOMP

urllib2.quote()ってアリなんだ

そりゃそうだよなあ、と気がついてみれば当たり前だけれど。

#urllib2.pyより抜粋
from urllib import (unwrap, unquote, splittype, splithost, quote,
addinfourl, splitport, splitgophertype, splitquery,
splitattr, ftpwrapper, noheaders, splituser, splitpasswd, splitvalue)
# support for FileHandler, proxies via environment variables
from urllib import localhost, url2pathname, getproxies

マニュアルにはかいてないから*1、urllib2を使っていても、いつも別途urllibをimportして、urllib.quote()と書いていた。

まあurllib2の無い環境でも動かそうとか考えると作法としてはいいんだろうけど、そもそもurllib2使っているんなら関係ないし。

標準モジュールもよく使うものはソースに目を通しておくのがいいんだな。勉強になるし。

*1http://docs.python.org/lib/module-urllib2.htmlの"The urllib2 module defines the following functions:"以下に無いから勝手に無いと思っていた。他にもたくさんこんな思い込みがありそう。