用Python和Tornad运行后台任务

2024-03-29 08:19:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经做了几年的web应用程序开发人员,现在正在使用Python和Robotics。在

我已经将pythontornado设置为基于javascript websocket命令运行。 这太棒了,移动马达,打开LED。没问题。在

我想做两件事。在

1)闪烁LED

2)使用超声波测距传感器,如果量程为<;X,则停止前进动作

我自己都知道如何做到。在

但是,我使用python的方式如下

在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()

在坦克.py 进口零售物价指数作为gpio 导入时间

^{pr2}$

注:坦克.py是摘要而不是实际代码。在

我的JS在Mouse Down上工作,用go调用python WS,Mouse up,call stop

就像我说的,效果很好

但是如果我在moveForward()方法上添加一个while循环来计算范围并在close时停止,那么我的WS将被绑定,而不会监听stop

同样,如果我运行一个方法来打开LED,sleeps,turn,sleeps,我的WS将无法监听任何命令。在


Tags: pyimport命令selfwebmessageledws
1条回答
网友
1楼 · 发布于 2024-03-29 08:19:26

听起来你需要屈服于IOLoop,这样它就可以处理更多的输入,同时在“前进”中继续执行。在

如果需要在前进中的循环之间暂停,请执行以下操作:

@gen.coroutine
def moveForward():
    while True:
        do_something()
        # Allow other processing while we wait 1 sec.
        yield gen.sleep(1)

从不使用“时间。睡觉“在Tornado回调或协同程序中,它会阻止整个进程的所有事件处理。使用IOLoop.add_超时,或“屈服”一般睡眠(n) “,而不是。在

相关问题 更多 >