Форум сайта python.su
Пользователь нажимает кнопочку на сайте, запускается длительная операция, лог которой реалтайм отображается у него в браузере.
Как такое проще всего организовать? Пробовал через торнадо, но, так как операция всё равно блокирующая, другому пользователю приходилось ждать пока закончит работать предыдущий.
Офлайн
Правильнее всего разделить рабочий процесс и процесс торнадо, по которому слушается вебсокет. Взаимодействие между рабочим процессом и торнадо надо будет сделать через какую либо службу сообщений. Самый простой вариант - использовать PyZmq, который умеет дружить с торнадо -через eventloop.
Офлайн
Есть вот такое http://habrahabr.ru/post/147525/ с RabbitMQ.
Офлайн
Спасибо, попробую разобраться. А вообще, что дает асинхронность торнадо? Просто я раньше думал, она поможет решить мне мою задачу, а теперь я не понимаю какая от неё вообще польза)
Офлайн
ziroА так же можно просто асинхронно читать вывод рабочего процесса пример
Взаимодействие между рабочим процессом и торнадо надо будет сделать через какую либо службу сообщений.
plusplus“Одновременное” выполнение кода в одном потоке, в отличие от многопоточных фреймфорков где на каждое подключение нужен отдельный поток. Если взглянуть на простой чат через веб-сокеты, при подключении 100к клиентов торнадо может обойтись одним потоком, для многопоточного фреймфорка придется открыть 100к потоков, а это будет неоправданный расход памяти и cpu. В общем случае асинхронные фреймворки применяют там где есть долгие подключения клиентов к серверу. Типа того…
что дает асинхронность торнадо
Офлайн
а теперь я не понимаю какая от неё вообще польза)
Отредактировано ziro (Сен. 5, 2013 08:19:57)
Офлайн
через SSE проще сделать, чем через сокеты, темболее обмен данными однонаправленный
вообще код показал бы, в том же twisted с асинхронным запуском процессов пробелм нет
Отредактировано slav0nic (Сен. 10, 2013 02:21:56)
Офлайн
slav0nicЭто оно https://github.com/niwibe/sse?
через SSE проще сделать, чем через сокеты, темболее обмен данными однонаправленный
slav0nic
вообще код показал бы, в том же twisted с асинхронным запуском процессов пробелм нет
class CountersSocket(tornado.websocket.WebSocketHandler): def on_message(self, message): # эта операция долго выполняется self.setup(message)
Офлайн
торнадо не юзаю, в твистед это делает через потоки, впроччем как и везде)
попробуй как тут сделать http://lbolla.info/blog/2013/01/22/blocking-tornado , если методы описанные выше не устраивают
plusplus
Это оно https://github.com/niwibe/sse?
Отредактировано slav0nic (Сен. 10, 2013 21:18:18)
Офлайн
slav0nicСпасибо, посмотрю. Вообще мне уже дали ссылку с реализацией на торнадо через процессы, я пока через них сделал, но потоки тоже интересны.
торнадо не юзаю, в твистед это делает через потоки, впроччем как и везде)
попробуй как тут сделать http://lbolla.info/blog/2013/01/22/blocking-tornado , если методы описанные выше не устраивают
slav0nic
оно, SSE это стандарт, а не библотека, я выбрал реализацию на twisted
Хотя в твоём случае наверно и банального comet хватит, вебсокеты имхо перебор
Офлайн