Введение в Tornado
Доброго времени суток, господа.
Сегодня я хочу поговорить о своём опыте освоения асинхронного сервера Tornado, написанного на языке Python. Этот пост не будет подробным мануалом, но несколько основных моментов я покажу. Фреймворк Tornado заинтересовал меня прежде всего своими результатами в тесте, опубликованном на официальнои сайте проекта. Заинтересовавшись, я нашёл ещё вот этот и этот тесты. В них Торнадо показал себя достаточно неплохо. Ну и то, что Торнадо используется (и разработан) командой FriendFeed, тоже кое о чём говорит. Как оказалось, фреймворк так же имеет достаточно удобную структуру. Итак, начнём.
Установка
При этом важно чтобы были установлены пакеты python-dev, python-pycurl и python-simplejson. Будем считать что с установкой вы справились и продолжим дальше.
Структура приложения
Мы не будем делать что-то более сложное чем «хелловорлд», но ключевые моменты я постараюсь передать. Каждое приложение на Торнадо, как правило, состоит из, собственно, класса приложения и классов хэндлеров (обработчиков) запросов. Класс простого приложения содержит в себе привязку хэндлеров к путям приложения и ряд настроек. Мы же можем определить в нём, например, подключение к базе данных, чтобы не создавать его при обработке каждого запроса, и затем передать его в классы хендлеров. Для этого мы объявим некий базовый хендлер и будем наследовать от него остальные.
Так как приложение на Торнадо, это, по сути, сервер, он может запускаться с разнообразными параметрами, определёнными разработчиками. Для упрощения их получения используется модуль Торнадо options.
Класс приложения наследуется от класса tornado.web.Application. Он может выглядеть например так:
class Application ( tornado. web . Application ) :
def __init__ ( self ) :
handlers = [
( r «/» , RootHandler ) ,
]
settings = dict (
template_path= os . path . join ( os . path . dirname ( __file__ ) , «templates» ) ,
static_path= os . path . join ( os . path . dirname ( __file__ ) , «static» ) ,
xsrf_cookies= True ,
cookie_secret= «11oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o/Vo #0000cd»>__init__ ( self , handlers, ** settings )
# MongoDB
self . connection = pymongo. Connection ( MONGODB_HOST, MONGODB_PORT )
self . db = self . connection [ «tornado» ]
Здесь в словаре настроек присутствуют пути до каталогов с шаблонами и статикой (контент, который не изменяется, например графика или файлы таблиц стилей). Они необходиы для движка шаблонов фреймворка и для статической отдачи файлов. Параметр xsrf_cookies включает генерацию токенов для форм для защиты XSRF. cookie_secret, как несложно догадаться, строка, используемая для генерации cookies. Здесь мы покачто не воспользуемся этим функционалом, но в дальнейших постах я опишу эти вещи. Следующая после настроек строка инициализирует класс приложения с обозначенными выше параметрами. Дальше я объявил подключение к базе данных MongoDB, чуть ниже мы передадим его в хендлеры.
Хендлеры
Хендлеры это классы, обрабатывающие входящие запросы в соответствии с правилами роутинга для приложения. Думаю, вы знаете что такое роутинг, так что объяснять не буду. В общем виде класс хендлера выглядит вот так:
class RootHandler ( tornado. web . RequestHandler ) :
def get ( self ) :
# do something here
self . write ( «Hello, world» )
Этот класс будет обрабатывать GET запросы, пришедшие на корневой адрес, то есть на sitename.org. В данном случае мы просто возвращаем строку «Hello, world!». А вот так может выглядеть наследование хэндлеров:
class BaseHandler ( tornado. web . RequestHandler ) :
@ property
def db ( self ) :
return self . application . db
class RootHandler ( BaseHandler ) :
def get ( self ) :
result = list ( self . db . contents . find ( < >, limit= 1 ) ) [ 0 ] [ «_id» ]
self . write ( str ( result ) )
Мы объявляем класс базового хэндлера и проксируем в нём инициализированное выше подключение к базе данных. Затем объявляем корневой контроллер, наследуемый от базового и выводим по запросу Id первой записи в коллекции. Вы же слышали о MongoDB, правда?
Теперь осталось написать функцию main, которая получит управление после запуска сервера и инициализирует его.
def main ( ) :
tornado. options . parse_command_line ( )
http_server = tornado. httpserver . HTTPServer ( Application ( ) )
http_server. listen ( options. port )
tornado. ioloop . IOLoop . instance ( ) . start ( )
Мы парсим командную строку на наличие переданных параметров (например, номер порта, который равен 8888 по умолчанию), создаём сервер, обслуживающий наше приложение и стартуем его.
Вот полный код нашего приложения, благо он небольшой по объёму:
import tornado. httpserver
import tornado. ioloop
import tornado. options
import tornado. web
from tornado. options import define, options
MONGODB_HOST = «192.168.1.2»
MONGODB_PORT = 27017
define ( «port» , default= 8888 , help = «run on the given port» , type = int )
class Application ( tornado. web . Application ) :
def __init__ ( self ) :
handlers = [
( r «/» , RootHandler ) ,
]
settings = dict ( )
tornado. web . Application . __init__ ( self , handlers, ** settings )
# MongoDB
self . connection = pymongo. Connection ( MONGODB_HOST, MONGODB_PORT )
self . db = self . connection [ «mallertv» ]
class BaseHandler ( tornado. web . RequestHandler ) :
@ property
def db ( self ) :
return self . application . db
class RootHandler ( BaseHandler ) :
def get ( self ) :
result = list ( self . db . contents . find ( < >, limit= 1 ) ) [ 0 ] [ «_id» ]
self . write ( str ( result ) )
def main ( ) :
tornado. options . parse_command_line ( )
http_server = tornado. httpserver . HTTPServer ( Application ( ) )
http_server. listen ( options. port )
tornado. ioloop . IOLoop . instance ( ) . start ( )
define определяет аргументы, передаваемые серверу и устанавливает их дефолтные значения, а так же строку подсказки. Неиспользуемые настройки я опустил за ненадобностью. Вот, собственно, и всё для начала, надеюсь, кто-то тоже заинтересуется Торнадо.
Tevo Tornado спецификация рамы
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Уже есть аккаунт? Войти в систему.
Последние посетители 0 пользователей онлайн
Ни одного зарегистрированного пользователя не просматривает данную страницу
- Уже зарегистрированы? Войти
- Регистрация
Главная
Активность
- Создать.
Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.
Подключение 3d принтера к компьютеру
Все любители 3d печати знают программу Repetier Host и большинство ей пользуются для подготовки 3d модели к процессу печати. Неудивительно, ведь данный софт представляет огромные возможности по настройке принтера и процесса прототипирования. Repetier Host отлично подходит как новичкам, предлагая простые настройки, так и профессионалам, умеющим править сгенерированный g-code.
Но главной особенностью Repetier Host является его удобство и понятный интерфейс. В данной статье мы поговорим о том, как через него подключить 3d принтер к компьютеру. Это делается очень быстро, но по пути могут возникнуть сложности, которые затормозят процесс. Итак, для начала нам нужно найти соединительный шнур USB. Если у вас есть под рукой обычный принтер, то можно использовать провод от него. Тем, кто знаком с Arduino Mega, знают, как подключить ее к компьютеру, здесь то же самое, так как большинство 3d принтеров работают именно на этой плате.
После подсоединения начнется автоматическая установка драйверов устройства. Если Вы используете китайский аналог ардуинки, то могут возникнуть проблемы с отсутствием цифровой подписи драйверов. Мы уже писали как их устранить для Windows 7 и для Windows 8,10 на примере установки RobotON Studio. После успешной установки, у Вас в диспетчере устройств должен определится COM-порт.
Это очень важно, если рядом стоят какие-либо знаки, символизирующие об ошибках, то нужно переустанавливать драйвер. Но чаще всего в Зd принтерах используют настоящие Arduino, поэтому такие проблемы возникают редко. Теперь нужно посмотреть, какой же номер COM-порта задействован. Именно его нам потребуется указать при подключении в Repetier Host. Переходим в программу и обращаем внимание на левый верхний угол. Там есть красная кнопка, рядом с которой написано «Присоединить».
Нажав на нее, 3d принтер должен автоматически подключиться. Но при первом подключении, скорее всего, это не получится, так как дефолту там стоит COM-1. Вылезет окошко с надписью «Блаблабла». Не пугайтесь и кликайте «Да», чтобы открыть настройки принтера. Вы попадете в окно настройки. Там нужно поменять лишь одно поле — выбрать тот COM-порт, который у Вас определяется с названием USB-Serial CH340. Сохраняете и применяете настройки и повторно кликаете «Присоединить». Должно все заработать!
Еще может вылезти ошибка, что COM-порт (ваш действующий) закрыт. Такое случается, когда Вы открываете еще одно окно с моделькой, в то время как принтер уже подключен к компьютеру через другой порт. Поэтому Вам придется дождаться окончания печати в первом окне, потом в нем выбрать нужную модель и печатать без повторного соединения. Либо же закрыть все окна, снова зайти и подсоединиться.
В чем же преимущества перед SD-картой, которую можно воткнуть в принтер? Ну, естественно, если у Вас есть стационарный компьютер и стоящий рядом 3d принтер, то Вам не придется больше постоянно вытаскивать карту памяти, чтобы перебросить на нее новую модель. Как только Вам захотелось напечатать что-то новое, вы сразу после слайсинга нажимаете на кнопку «Печать» и начинаете данный процесс. Кроме этого, больше не нужно будет подходить и смотреть готовность печати. На экране Вашего монитора смартфона, планшета или ПК будет отображаться каждое действие создания модели.
Это очень удобно и приятно выглядит в различной цветовой гамме новых и старых областей печати. Можно остановить или сделать паузу, изменить температуру стола или экструдера, а также Вы сможете всегда видеть, сколько времени осталось до конца печати. Используя TeemViewer, можно легко ставить на печать модельки из любого места, просто подключившись удаленно к стационарнику. После завершения печати, удаленно управляя экструдером, можно скинуть модельки со стола и начать новую печать!
Заключение
Все отмеченные недостатки являются несущественными и сам по себе 3D принтер TEVO Tarantula представляет собой маленький технологический шедевр и крайне рекомендуется к покупке даже в том случае, если 3D печать вам вовсе не нужна, хотя бы как пособие по DIY и средство для выпрямления рук.
В том же случае, если вам нужен недорогой качественный 3D принтер и вы готовы потратить некоторое время и силы на его сборку, то TEVO Tarantula тем более рекомендуется к приобретению.