Browse Source

定时读取redis 超时问题处理

master
dongchangxi 1 year ago
parent
commit
8184799610
  1. 47
      timer/external_order_glb.py
  2. 106
      timer/get_weight_to_update.py
  3. 27
      timer/setup_oem_exe.py

47
timer/external_order_glb.py

@ -171,6 +171,19 @@ def createGlb(pid):
export_and_update_glbs(pid) export_and_update_glbs(pid)
def create_redis_connection():
"""创建 Redis 连接,若连接失败则重试"""
while True:
try:
r = redis.Redis(host="106.14.158.208",password="kcV2000",port=6379,db=6)
# 尝试进行一次操作,检查连接是否有效
r.ping() # ping 操作是一个简单的连接测试
print("Redis连接成功!")
return r
except ConnectionError:
print("Redis连接失败,正在重试...")
time.sleep(5)
if __name__ == '__main__': if __name__ == '__main__':
arrArgs = sys.argv arrArgs = sys.argv
if len(arrArgs) == 2: if len(arrArgs) == 2:
@ -181,22 +194,28 @@ if __name__ == '__main__':
createGlb(str(pid)) createGlb(str(pid))
else: else:
r = redis.Redis(host="106.14.158.208",password="kcV2000",port=6379,db=6) r = create_redis_connection()
while True: while True:
if r.llen('model:3dglb') == 0: try:
print('队列为空,等待10秒') if r.llen('model:3dglb') == 0:
time.sleep(10) print('队列为空,等待10秒')
continue time.sleep(10)
continue
info = r.lpop('model:3dglb')
if info is None: info = r.lpop('model:3dglb')
print('队列为空,等待10秒') if info is None:
print('队列为空,等待10秒')
time.sleep(10)
pid = info.decode('utf-8')
if not pid.isdigit():
continue
createGlb(pid)
except Exception as e:
print(f'错误:{e}')
time.sleep(10) time.sleep(10)
pid = info.decode('utf-8') r = create_redis_connection()
if not pid.isdigit():
continue continue
createGlb(pid)

106
timer/get_weight_to_update.py

@ -22,53 +22,73 @@ def getOrderInfoByOrderId(orderId):
print(f"获取订单信息异常: {str(e)}") print(f"获取订单信息异常: {str(e)}")
return "error","error" return "error","error"
if __name__ == '__main__': def create_redis_connection():
r = redis.Redis(host="106.14.158.208",password="kcV2000",port=6379,db=6) """创建 Redis 连接,若连接失败则重试"""
while True: while True:
print(f"时间-{time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())}") try:
if r.llen('model:weight') == 0: r = redis.Redis(host="106.14.158.208",password="kcV2000",port=6379,db=6)
print('队列为空,等待10秒') # 尝试进行一次操作,检查连接是否有效
time.sleep(10) r.ping() # ping 操作是一个简单的连接测试
continue print("Redis连接成功!")
return r
except ConnectionError:
print("Redis连接失败,正在重试...")
time.sleep(5)
# info 的数据格式为有以下几种情况 1. orderId 2 orderId_print_9,1.2,45,27 3. orderId_auto_9,1.2,45,27
info = r.lpop('model:weight')
if info is None:
print('队列为空,等待10秒')
time.sleep(10)
info = info.decode('utf-8')
orderId = 0
pid = 0
modelSize = []
typeModel = "print"
#判断info是什么类型的数据
arrInfo = info.split("_")
if len(arrInfo) == 1:
orderId = arrInfo[0]
pid,modelSize = getOrderInfoByOrderId(orderId)
if pid == "error":
print("获取订单信息失败")
continue
elif len(arrInfo) == 3: if __name__ == '__main__':
orderId = arrInfo[0] r = create_redis_connection()
pid,temp = getOrderInfoByOrderId(orderId) while True:
if pid == "error": try:
print("获取订单信息失败") print(f"时间-{time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())}")
continue if r.llen('model:weight') == 0:
typeModel = arrInfo[1] print('队列为空,等待10秒')
modelSize = arrInfo[2] time.sleep(10)
if typeModel != "print" and typeModel != "auto":
print("typeModel类型不对")
continue continue
# info 的数据格式为有以下几种情况 1. orderId 2 orderId_print_9,1.2,45,27 3. orderId_auto_9,1.2,45,27
info = r.lpop('model:weight')
if info is None:
print('队列为空,等待10秒')
time.sleep(10)
info = info.decode('utf-8')
orderId = 0
pid = 0
modelSize = []
typeModel = "print"
#判断info是什么类型的数据
arrInfo = info.split("_")
if len(arrInfo) == 1:
orderId = arrInfo[0]
pid,modelSize = getOrderInfoByOrderId(orderId)
if pid == "error":
print("获取订单信息失败")
continue
if int(orderId) == 0 or int(pid) == 0 or len(modelSize) == 0: elif len(arrInfo) == 3:
print("orderId pid modelSize 有出现问题") orderId = arrInfo[0]
continue pid,temp = getOrderInfoByOrderId(orderId)
if pid == "error":
print("获取订单信息失败")
continue
typeModel = arrInfo[1]
modelSize = arrInfo[2]
if typeModel != "print" and typeModel != "auto":
print("typeModel类型不对")
continue
#转成数组
arrModelSize = modelSize.split(",") if int(orderId) == 0 or int(pid) == 0 or len(modelSize) == 0:
print(f'执行脚本--- "python D:/make2/tools/cal_weight.py {typeModel} {pid} {modelSize} {orderId}"') print("orderId pid modelSize 有出现问题")
#发起计算请求 continue
os.system(f"python D:/make2/tools/cal_weight.py {typeModel} {pid} {modelSize} {orderId}")
#转成数组
arrModelSize = modelSize.split(",")
print(f'执行脚本--- "python D:/make2/tools/cal_weight.py {typeModel} {pid} {modelSize} {orderId}"')
#发起计算请求
os.system(f"python D:/make2/tools/cal_weight.py {typeModel} {pid} {modelSize} {orderId}")
except Exception as e:
print(f"执行脚本异常: {str(e)}")
time.sleep(10)
r = create_redis_connection()
continue

27
timer/setup_oem_exe.py

@ -42,9 +42,24 @@ def zip_dir(path, output=None):
zip.write(os.path.join(root, filename), relative_root + filename) # 文件路径 压缩文件路径(相对路径) zip.write(os.path.join(root, filename), relative_root + filename) # 文件路径 压缩文件路径(相对路径)
zip.close() zip.close()
def create_redis_connection():
"""创建 Redis 连接,若连接失败则重试"""
while True:
try:
r = redis.Redis(host="106.14.158.208",password="kcV2000",port=6379,db=1)
# 尝试进行一次操作,检查连接是否有效
r.ping() # ping 操作是一个简单的连接测试
print("Redis连接成功!")
return r
except ConnectionError:
print("Redis连接失败,正在重试...")
time.sleep(5)
def main(): def main():
#连接mp 的redis #连接mp 的redis
r = redis.Redis(host="106.14.158.208",password="kcV2000",port=6379,db=1) r = create_redis_connection()
#本地测试环境 #本地测试环境
#r = redis.Redis(host="172.31.1.254",port=6379,db=1) #r = redis.Redis(host="172.31.1.254",port=6379,db=1)
#取出数据 #取出数据
@ -131,5 +146,11 @@ if __name__ == '__main__':
#开启定时循环模式 #开启定时循环模式
print("开启定时任务,检测是否打包") print("开启定时任务,检测是否打包")
while True: while True:
main() try:
time.sleep(10) main()
time.sleep(10)
continue
except Exception as e:
print(f"出现异常: {str(e)}")
time.sleep(10)
continue
Loading…
Cancel
Save