Python Auto Reload とファイル変更管理
前にCherryPyのAutoReload機能についてメモったけど、今回はその中でもファイルの変更を監視してる部分をチェキ。
def autoreload(self): """Reload the process if registered files have been modified.""" sysfiles = [] #ファイルの事前処理 for k, m in sys.modules.items(): if re.match(self.autoreload_match, k): if hasattr(m, "__loader__"): if hasattr(m.__loader__, "archive"): k = m.__loader__.archive k = getattr(m, "__file__", None) sysfiles.append(k) #ここでファイルの最終変更時間を比較、異なる場合は再実行。 for filename in sysfiles + self.reload_files: if filename: if filename.endswith(".pyc"): filename = filename[:-1] oldtime = self.mtimes.get(filename, 0) if oldtime is None: # Module with no .py file. Skip it. continue try: mtime = os.stat(filename).st_mtime except OSError: # Either a module with no .py file, or it's been deleted. mtime = None if filename not in self.mtimes: # If a module has no .py file, this will be None. self.mtimes[filename] = mtime else: if mtime is None or mtime > oldtime: # The file has been deleted or modified. self.reexec()
すんません、かなり適当。けど今取り込んでるのでこのくらい。今度追記しておきます。
Sensology 06
Sensology 06
前回のつづき、共感とSensologyの関わりについて。Sensologyにおいて人の共感という感情は非常に重要、っていうまでもないですかね。ある商品、サービスを出すにも相手に理解されなくてはしょうがない。しかし、当たり前すぎてもしょうがない。特徴や、存在意義がなくなってしまう。
重要なのは理解可能だが、想像不可能なもの。どうすればそれが得られるか?
- phase 1
一般事象を考える。今世の中でなりなっている常識やシステムを意識する。
- phase 2
自分が求める究極の形を考える。実現不可能に近い感じ。
- phase 3
phase 2実現のために方法を、一般事象のメタな形で表現する。
例えば、あなたが最強のシステムを作りたいと思う。今のノウハウだと難しい、だけどクライアントを納得させなければならない。どうすればいいかというと、100年後の今を想像する。すると、今ではできないこともできてるだろう。それを前提にして今の状況を改善する手法を提案する。
といった感じ。さて、これがうまくいくかどうか、それは、僕が実践して試します・・・。
python autoreload
autoreloadに関して少し勉強。Cherrypyを参考にしていたんだけど、前と今ではちょっと処理が違うみたい。
前の処理はhttp://d.hatena.ne.jp/Wacky/20060820/1156050077に書いてあるように、子プロセスが実行プロセスで、親プロセスが管理プロセスの役割を果たしているみたい。
だけど、CherryPy3.0.3からはautoreload.pyがなくなって_cpengine.pyにautoreload関数がある。これがファイル数ごとに
reexec()を行っている感じ。
def autoreload(self): """Reload the process if registered files have been modified.""" sysfiles = [] for k, m in sys.modules.items(): if re.match(self.autoreload_match, k): if hasattr(m, "__loader__"): if hasattr(m.__loader__, "archive"): k = m.__loader__.archive k = getattr(m, "__file__", None) sysfiles.append(k) for filename in sysfiles + self.reload_files: if filename: if filename.endswith(".pyc"): filename = filename[:-1] oldtime = self.mtimes.get(filename, 0) if oldtime is None: # Module with no .py file. Skip it. continue try: mtime = os.stat(filename).st_mtime except OSError: # Either a module with no .py file, or it's been deleted. mtime = None if filename not in self.mtimes: # If a module has no .py file, this will be None. self.mtimes[filename] = mtime else: if mtime is None or mtime > oldtime: # The file has been deleted or modified. self.reexec()
reexecは一度サーバーを停止させて、諸設定をした後にexecvを行ってる。そっか、新しい方では一つのプロセスで自動リロードをすませているのか。
def reexec(self): """Re-execute the current process.""" cherrypy.server.stop() self.stop() args = sys.argv[:] cherrypy.log("Re-spawning %s" % " ".join(args), "ENGINE") args.insert(0, sys.executable) if sys.platform == "win32": args = ['"%s"' % arg for arg in args] # Some platforms (OS X) will error if all threads are not # ABSOLUTELY terminated. See http://www.cherrypy.org/ticket/581. for trial in xrange(self.reexec_retry * 10): try: os.execv(sys.executable, args) return except OSError, x: if x.errno != 45: raise time.sleep(0.1) else: raise
turbogears を使ってみた!!
感想、楽しい!!The 20 Minutes Wikiをみながらサンプルを作ってみたけど、本当に簡単にできます。
ただ、スクリーンキャストと実際のコードがちがかったりして、少しとまどったりしたり。
注意しなきゃいけないのは、cheethaのバージョン。僕の場合はバージョンがあってなくてエラーが出ました。
turbogearsをインストールする前にCheetah Templateを入れるとそういうことが起きるみたい。
そういうときは
easy_install --upgrade cheetah
としましょう。
あとは、スクリーンキャストとドキュメントに書かれていることが少し違うこと。スクリーンキャストだとdocutilsのインストールにはふれてなかったと思うし。ドキュメントをよんでからスクリーンキャストを見るとスムーズにいくでしょう。
今後turbogearsを使ってみようと思います。djangoもつかってみよー。
Sensology 05
Sensology 05
今日の話題は共感について。共感。んー。不思議な響きですね。
共に感じる。感性を共有する。いろんな表現ができると思う。
辞書を引いてみると
(1)他人の考え・行動に、全くそのとおりだと感ずること。同感。
「―を覚える」「―がわく」「彼の人生観に―する」
(2)〔心〕〔sympathy〕他人の体験する感情を自分のもののように感じとること。
だそうな。おおむね合ってそう。
共感をすると不思議とうれしくなるのはなぜでしょう?
「痛くないのにイタイ!とか叫んじゃうんだよねー」
「わかるわかる!」
こんな感じ。
不思議なのは、その感性が少しでも似ている人に共感を求めたり合わせたりするところ。
他人と自分の感じ方の差分をとって、少し強引に。
なぜだろう?
共感できるということは、相手の感じ方がわかること、つまり理解できること。
人間は理解できるとうれしいものです。
数学だって解けると楽しいもんね。
逆に理解できないと拒否します。それは文化や宗教、環境などさまざまな物事において言えること。
人が共感を求めるというのは理解を求めるということと言えるでしょう。
少なくとも僕はそう。なんせSensologyなぞと言っている訳ですから。。。。
それに、自分の辛さや悲しみをわかってもらうとうれしいもんね。
これをどのようにSensologyに当てはめていくか、それは次回に。