Я программирую на python для уже существующего проекта по пилонам (ckan от okfn), но я шучу по профессии и привык к такому способу.
Пожалуйста, поправьте меня, если ясделать ложные заявления:
В пилонах кажется, что я должен сказать
$ paster serve --reload
, чтобы получить веб-сервер, который будет замечать изменения.
На этом этапе я могу изменить функцию, сохранить файл и затем перейти в свой браузер, чтобы проверить это изменение.
Если я хочу проверить переменные в функции в процессе созданиявеб-страницы, затем я поднимаю «привет», а затем, когда я загружаю страницу, я получаю отладчик на основе браузера, в котором я могу исследовать программу.
Это все очень хорошо и работает плавно, и у меня складывается впечатление, что именно так люди, как правило, пишут код пилонов.
К сожалению, перезагрузка занимает несколько секунд, и она продолжает ломать мою чередуподумал.
Что я хотел бы сделать, так это запустить веб-сервер из emacs (хотя REPL для Python в командной строке был бы почти таким же хорошим), чтобы я мог изменить функцию в редактореи затем отправьте новый код запущенному процессу без необходимости его перезапуска.(с командной строкой repl, я думаю, мне пришлось бы скопировать и вставить новую вещь, но это также было бы работоспособно, чуть менее удобно)
Python кажется очень динамичным и во многом похожим на lispпоэтому я не вижу принципиальной причины, по которой это не сработает.
Так что, я думаю, вопрос в следующем:
Кто-нибудь знает, как делать что-то с помощью LISP, и сПилоны, и могут ли они сказать мне, как запрограммировать способ lisp в пилонах?Или это невозможно или плохая идея по какой-то причине?
Редактировать:
Я могу запустить веб-сервер из моего интерпретатора Python внутри Emacs с помощью:
from paste.script.serve import ServeCommand
ServeCommand("serve").run(["development.ini"])
И яможно заставить код остановиться и показать мне, что он делает, вставив:
import pdb
pdb.set_trace()
, так что теперь все, что мне нужно, это способ заставить веб-сервер работать в другом потоке, чтобы управление возвращалось в 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, изменение не будет отражено в веб-сервере.Кто-нибудь знает почему?