Commit d11e5a0c authored by joliu's avatar joliu

变更为同时处理多任务

parent 454598de
...@@ -4,7 +4,8 @@ ...@@ -4,7 +4,8 @@
* 1. 检查任务队列是否存在任务 * * 1. 检查任务队列是否存在任务 *
* 2. 从任务队列中取任务并执行 * * 2. 从任务队列中取任务并执行 *
* 3. 发送控制命令到指定的智能体 * * 3. 发送控制命令到指定的智能体 *
* 4. 未来或许可以根据配置的智能体参数, * * 4. 读取全部任务队列中任务,并依次执行 *
* 5. 未来或许可以根据配置的智能体参数, *
* 动态修改智能体的计算资源等 * * 动态修改智能体的计算资源等 *
* * * *
* author: joliu<joliu@s-an.org> * * author: joliu<joliu@s-an.org> *
...@@ -20,7 +21,7 @@ import time ...@@ -20,7 +21,7 @@ import time
def findTask(): def findTask():
try: try:
sql = "select * from task LIMIT 1" sql = "select * from task"
conn = sqlite3.connect("task.db") conn = sqlite3.connect("task.db")
cursor = conn.cursor() cursor = conn.cursor()
cursor.execute(sql) cursor.execute(sql)
...@@ -37,30 +38,12 @@ def findTask(): ...@@ -37,30 +38,12 @@ def findTask():
return (status, output) return (status, output)
# 根据符号来比较两个数值的大小 # 根据任务队列中任务,依次执行
def compare(signal, value1, value2): def doTask():
if signal == '>': (status, outputs) = findTask()
return value1 > value2 if status != 1:
elif signal == '<': return (status, outputs)
return value1 < value2 for output in outputs:
elif signal == '=':
return value1 == value2
else:
return False
def mainWhileProcess(input_ctime):
ctime = input_ctime
while True:
print(ctime)
time.sleep(ctime)
(status, output) = findTask()
if status == -1:
print(output)
# 如果数据库为空,或者错误,恢复初始设置
ctime = input_ctime
continue
(task, taskid, ctime) = output (task, taskid, ctime) = output
if len(task.split(';')) != 2 or len(task.split(':')) != 3: if len(task.split(';')) != 2 or len(task.split(':')) != 3:
print("Error task: %s" % task) print("Error task: %s" % task)
...@@ -70,24 +53,47 @@ def mainWhileProcess(input_ctime): ...@@ -70,24 +53,47 @@ def mainWhileProcess(input_ctime):
(condition, command) = task.split(';') (condition, command) = task.split(';')
(ip, port, method) = command.split(':') (ip, port, method) = command.split(':')
# 构建控制命令
# 构建控制指令
method = 'device&' + method method = 'device&' + method
# 读取传感器数值 # 读取传感器数值
(status, output) = sendCommandToDevice(method) (status, data) = sendCommandToDevice(method)
# 针对dht11的数据格式做一个简单的数据预处理 # 千杀的dht11,需要处理下数据
output = output.split('&')[0] data = data.split('&')[0]
print(output)
if status == -1: if status == -1:
print("get device data failed! ip: %s, method: %s" % (ip, method)) print("get device data failed! ip: %s, method: %s" % (ip, method))
continue return (status, "get device data failed! ip: %s, method: %s" % (ip, method))
if compare(condition[0], float(output), float(condition[1:])): if compare(condition[0], float(data), float(condition[1:])):
# 当结果为真,向目标传感器发出指令 # 当结果为真,向目标传感器发出指令
(status, output) = sendBySocket(ip, int(port), method) (status, recvdata) = sendBySocket(ip, int(port), method)
print(output) print(recvdata)
time.sleep(ctime)
else: else:
pass pass
return (1, 'success')
# 根据符号来比较两个数值的大小
def compare(signal, value1, value2):
if signal == '>':
return value1 > value2
elif signal == '<':
return value1 < value2
elif signal == '=':
return value1 == value2
else:
return False
def mainWhileProcess(input_ctime):
while True:
print("cycle time :" + str(input_ctime))
time.sleep(input_ctime)
(status, output) = doTask()
print(output)
if __name__ == "__main__": if __name__ == "__main__":
mainWhileProcess(5) mainWhileProcess(5)
...@@ -4,7 +4,8 @@ ...@@ -4,7 +4,8 @@
* 1. 检查任务队列是否存在任务 * * 1. 检查任务队列是否存在任务 *
* 2. 从任务队列中取任务并执行 * * 2. 从任务队列中取任务并执行 *
* 3. 发送控制命令到指定的智能体 * * 3. 发送控制命令到指定的智能体 *
* 4. 未来或许可以根据配置的智能体参数, * * 4. 读取全部任务队列中任务,并依次执行 *
* 5. 未来或许可以根据配置的智能体参数, *
* 动态修改智能体的计算资源等 * * 动态修改智能体的计算资源等 *
* * * *
* author: joliu<joliu@s-an.org> * * author: joliu<joliu@s-an.org> *
...@@ -26,11 +27,11 @@ def sendCommandToDevice(cmd): ...@@ -26,11 +27,11 @@ def sendCommandToDevice(cmd):
def findTask(): def findTask():
try: try:
sql = "select * from task LIMIT 1" sql = "select * from task"
conn = sqlite3.connect("task.db") conn = sqlite3.connect("task.db")
cursor = conn.cursor() cursor = conn.cursor()
cursor.execute(sql) cursor.execute(sql)
data = cursor.fetchone() data = cursor.fetchall()
if data is None: if data is None:
(status, output) = (-1, 'database is empty!') (status, output) = (-1, 'database is empty!')
else: else:
...@@ -43,6 +44,43 @@ def findTask(): ...@@ -43,6 +44,43 @@ def findTask():
return (status, output) return (status, output)
# 根据任务队列中任务,依次执行
def doTask():
(status, outputs) = findTask()
if status != 1:
return (status, outputs)
for output in outputs:
(task, taskid, ctime) = output
if len(task.split(';')) != 2 or len(task.split(':')) != 3:
print("Error task: %s" % task)
continue
# 初步定义task字符串模式 eg: >30;192.168.1.1:3000:off
(condition, command) = task.split(';')
(ip, port, method) = command.split(':')
# 构建控制命令
method = 'device&' + method
# 读取传感器数值
(status, data) = sendCommandToDevice(method)
# 千杀的dht11,需要处理下数据
data = data.split('&')[0]
print(output)
if status == -1:
print("get device data failed! ip: %s, method: %s" % (ip, method))
return (status, "get device data failed! ip: %s, method: %s" % (ip, method))
if compare(condition[0], float(data), float(condition[1:])):
# 当结果为真,向目标传感器发出指令
(status, recvdata) = sendBySocket(ip, int(port), method)
print(recvdata)
time.sleep(ctime)
else:
pass
return (1, 'success')
# 通过socket发送信息 # 通过socket发送信息
def sendBySocket(ip, port, cmd): def sendBySocket(ip, port, cmd):
try: try:
...@@ -92,46 +130,12 @@ def compare(signal, value1, value2): ...@@ -92,46 +130,12 @@ def compare(signal, value1, value2):
def mainWhileProcess(input_ctime): def mainWhileProcess(input_ctime):
ctime = input_ctime
while True: while True:
print(ctime) print("cycle time :" + str(input_ctime))
time.sleep(ctime) time.sleep(input_ctime)
(status, output) = findTask() (status, output) = doTask()
if status == -1:
print(output) print(output)
# 如果数据库为空,或者错误,恢复初始设置
ctime = input_ctime
continue
(task, taskid, ctime) = output
if len(task.split(';')) != 2 or len(task.split(':')) != 3:
print("Error task: %s" % task)
continue
# 初步定义task字符串模式 eg: >30;192.168.1.1:3000:off
(condition, command) = task.split(';')
(ip, port, method) = command.split(':')
# 构建控制命令
method = 'device&' + method
# 读取传感器数值
(status, output) = sendCommandToDevice(method)
# 千杀的dht11,需要处理下数据
output = output.split('&')[0]
print(output)
if status == -1:
print("get device data failed! ip: %s, method: %s" % (ip, method))
continue
if compare(condition[0], float(output), float(condition[1:])):
# 当结果为真,向目标传感器发出指令
(status, output) = sendBySocket(ip, int(port), method)
#print(output)
else:
pass
print(1212)
if __name__ == "__main__": if __name__ == "__main__":
mainWhileProcess(5) mainWhileProcess(5)
#print(doTask())
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment