我在預先存在的pylons項目(okfn的ckan)上對python進行編程,但是我是一個交易者,習慣於這種做事的方式。Pylons REPL重新評估運行Web服務器中的代碼
請糾正我,如果我作出虛假陳述:
在塔似乎我應該說
$貼膜服務--reload
得到那個會發現變化的Web服務器。
在這一點上,我可以改變一個功能,保存文件,然後到我的瀏覽器來測試更改。
如果我想在製作網頁的過程中檢查函數中的變量,那麼我會提出「hello」,然後當我加載頁面時,我會得到一個基於瀏覽器的調試器,我可以在其中檢查程序。
這一切都非常好,並且運作順暢,我的印象是人們傾向於編寫鏈接代碼。
不幸的是,重新加載需要幾秒鐘的時間,它不斷打破我的思路。
我想要做的就是從emacs運行web服務器(儘管命令行上的python REPL幾乎一樣好),以便我可以在編輯器中更改函數,然後發送新代碼運行的過程,而不必重新啓動它。 (使用命令行repl我想我必須複製和粘貼新的東西,但這也可行,只是略微不方便)
Python看起來很有活力,很像lisp,所以很多方面都如此原則上我看不出任何理由,爲什麼不行。
所以我想的問題是:
是任何人都熟悉的做事方式口齒不清,並與主塔,他們能告訴我如何在塔柱口齒不清的方式編程?或者出於某種原因,這是不可能的還是一個壞主意?
編輯:
我可以從我的Python解釋器運行Web服務器在Emacs:
from paste.script.serve import ServeCommand
ServeCommand("serve").run(["development.ini"])
,我可以得到的代碼插入停下來,告訴我它在做什麼:
import pdb
pdb.set_trace()
所以現在我所需要的是一種讓Web服務器在不同線程上運行的方式,以便控制權返回到REPL,並且我可以在運行過程中重新定義函數和變量。
def start_server():
from paste.script.serve import ServeCommand
ServeCommand("serve").run(["development.ini"])
server_thread=threading.Thread(target=start_server)
server_thread.start()
這似乎工作,除非如果我重新定義在REPL函數更改不反映在Web服務器。有誰知道爲什麼?
」這個變化沒有反映在網絡服務器上,有人知道爲什麼嗎?「問題是已經用舊代碼創建了這些對象。改變類的定義不會重載現有對象上的'__class__'(或'func_code'或其他)屬性。這就是爲什麼重新加載整個過程通常更容易。 – SingleNegationElimination 2011-03-25 02:25:23
謝謝。這看起來像一個showstopper。我會放棄。哦,好吧...我想我會等到我的電腦變得更快... – 2011-03-25 15:57:59