Я уже несколько лет являюсь разработчиком веб-приложений и теперь играю с Python и Robotics.Запуск фоновой задачи с Python и Tornado
Я установил Python Tornado для запуска на основе команд websocket javascript. Это замечательно, двигает двигатели, включает светодиоды. не проблема.
2 вещи, которые я хочу сделать.
1) Вспышка светодиоды
2) с помощью датчиков ультразвукового диапазона, остановить FORWARD действие IF диапазон < X
Я знаю, как это сделать, как в самом себе.
НО, как у меня есть питон следующим
WS.py
import tornado.httpserver
import tornado.websocket
import tornado.ioloop
import tornado.web
import time
# My Over python module
import tank
class WSHandler(tornado.websocket.WebSocketHandler):
def open(self):
print 'New connection was opened'
self.write_message("Welcome to my websocket!")
tank.init()
def on_message(self, message):
print 'Incoming message:', message
tank.run(message)
self.write_message("You said: " + message)
def on_close(self):
tank.end()
print 'Connection was closed...'
def check_origin(self, origin):
return True
application = tornado.web.Application([
(r'/ws', WSHandler),
])
if __name__ == "__main__":
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(8888)
tornado.ioloop.IOLoop.instance().start()
TANK.py импорт RPi.GPIO в GPIO время импорта
def init():
#Setting up all my pins, Not going to add all
def moveForward():
#open GPIO pins to move motors forward
def stop():
# close all GPIO pins to stop motors
def run(action):
# the method called by the IOLoop
if action == 'go':
moveForward()
elif action == 'stop':
stop()
else:
print "Oops, i cocked up"
NOTE : tank.py - сводный, а не фактический код.
My JS работает на мышь вниз, вызовите мой питон WS с ходом, кнопками мыши, вызовите остановить
Как я сказал, работает отлично
, но если добавить время цикла на moveForward() метод выработать диапазон и остановиться, если закрыть, тогда мой WS будет привязан и не будет прослушивать STOP
Аналогично, если я запускаю метод, который включает светодиод, спит, выключается, спит, My WS не сможет для прослушивания любых команд.
Лучше, чем постоянно работает фоновое задание. Работает с хорошим обаянием. Можете ли вы объяснить, почему мне нужно @ gen.coroutine –
Торнадо «сопрограмма» - это параллельная задача, что-то вроде потока, которое может быть приостановлено и возобновлено. Когда он приостановлен, IOLoop может работать над другими задачами. Для получения дополнительной информации см. Мою статью: http://emptysqua.re/blog/refactoring-tornado-coroutines/ –