当龙卷风websocket python上的线程运行时,超声波传感器在给出一些读数后停止

时间:2016-01-15 14:13:25

标签: python multithreading websocket raspberry-pi tornado

我正在使用Raspberry Pi使用Python脚本读取超声波传感器。

当我独立运行Python脚本时,它会不断阅读,因为我在while循环中调用get_ultra函数。
但是当我使用线程在Python Tornado WebSocket服务器上调用while循环中的get_ultra函数时,它会在几次读数后停止读取。

这是我的ultrasonic.py文件代码:

#!/usr/bin/python
import time

import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)

def get_ultra():

    global componentconfig

    GPIO_TRIGGER = 26
    GPIO_ECHO    = 26
    GPIO.setwarnings(False)
    GPIO.setup(GPIO_TRIGGER,GPIO.OUT)
    GPIO.output(GPIO_TRIGGER, False)

    time.sleep(0.01)

    GPIO.output(GPIO_TRIGGER, True)
    time.sleep(0.00001)
    GPIO.output(GPIO_TRIGGER, False)
    start = time.time()
    GPIO.setup(GPIO_ECHO,GPIO.IN)

    while GPIO.input(GPIO_ECHO)==0:
        start = time.time()

    while GPIO.input(GPIO_ECHO)==1:
        stop = time.time()

    elapsed = stop - start

    distance = elapsed * 34300
    distance = distance / 2
    distance1 = "%.2f" % distance
    print "ultra sonic distance" , distance1

if __name__ == '__main__':
    while 1:
        get_ultra()
        time.sleep(1)

这是我的Tornado WebSocket服务器:

import time
import thread
import traceback
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
import tornado.websocket
import ultrasonic

def Ultrasonic(T_name,a):

    while 1:
        ultrasonic.get_ultra()
        time.sleep(0.0038)


class ServerHandler(tornado.websocket.WebSocketHandler):

    def check_origin(self, origin):

        return True

    def open(self):

        print"Connection open"

    def on_close(self):

        print"Connection close"

    def on_message(self,message):

        print message
        if message=="start":
             t12=threading.Thread(target=Ultrasonic,args('ultrasonic', 0 ))
             t12.setDaemon(True)
             t12.start()

if __name__=="__main__":

    tornado.options.parse_command_line()

    app=tornado.web.Application(handlers=[(r"/",ServerHandler)])

    server=tornado.httpserver.HTTPServer(app)

    app.listen(9001)

    tornado.ioloop.IOLoop.instance().start()

注意:在t12线程中,我调用另外十个线程,我在这里没有提到。我想我的内存可能会泄漏。

0 个答案:

没有答案