12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- import time
- import pymysql as psql
- import message_pb2 as message
- import google.protobuf.text_format as tf
- import threading
- class DBSeacher(threading.Thread):
- def __init__(self,ip,port,database,user,password,unit):
- threading.Thread.__init__(self)
- self.ip=ip
- self.port=port
- self.database=database
- self.user=user
- self.password=password
- self.unit=unit
- self._close=False
- self.conn=psql.connect(host=ip,
- port=port,
- database=database,
- charset="utf8",
- user=user,
- passwd=password)
- self.led_callback=None
- def set_ledcallback(self,callback):
- self.led_callback=callback
- def close(self):
- self._close=True
- self.join()
- self.conn.close()
- def search_difficulty(self):
- self.conn.begin()
- cursor=self.conn.cursor()
- SQL="select * from space where height>1.55 and unit=%d and car_number IS NULL and statu=0"%self.unit
- suv=cursor.execute(SQL)
- SQL="select * from space where height<=1.55 and unit=%d and car_number IS NULL and statu=0"%self.unit
- small=cursor.execute(SQL)
- SQL="select * from command_queue where statu=0 and type=1 and unit=%d"%self.unit
- cursor.execute(SQL)
- idel_cmds=cursor.fetchall()
- self.conn.commit()
- cursor.close()
- suv_cmd=0
- small_cmd=0
- for cmd in idel_cmds:
- measure_string=cmd[7]
- measure_info=message.measure_info()
- tf.Parse(measure_string,measure_info)
- if measure_info.height>1.55:
- suv_cmd=suv_cmd+1
- elif measure_info.height<=1.55:
- small_cmd=small_cmd+1
- return [small,suv,suv_cmd,small_cmd]
- def run(self):
- while self._close==False:
- space=self.search_difficulty()
- if space==None:
- print("ERROR Search None")
- small,suv,cmd_suv,cmd_small=space
- idle_small=small-cmd_small
- idle_suv=suv-cmd_suv
- if idle_small<0:
- idle_suv=suv-cmd_suv-(-idle_small)
- idle_small=0
- if not self.led_callback==None:
- self.led_callback(idle_suv,idle_suv+idle_small)
- time.sleep(1)
|