Ver Fonte

部分优化

rambo há 4 meses atrás
pai
commit
0f6d66b5fa

+ 3 - 4
python/api.py

@@ -546,7 +546,7 @@ def device_config_detail_query():
 
 
 @app.post("/remove_config", description="删除一条可执行命令")
-def remove_config(params: ModelGetDeviceConfigDetail):
+def get_device_configs(params: ModelGetDeviceConfigDetail):
     action_id = params.id
     session = SqlQuery()
     configModel = CRUD(DeviceConfig)
@@ -606,7 +606,7 @@ def reset_config(params: ModelGetDeviceConfig):
 @app.get("/get_photo_records", description="获取拍照记录")
 def get_photo_records(page: int = 1, size: int = 5):
     session = SqlQuery()
-    photos = CRUD(PhotoRecord)
+    # photos = CRUD(PhotoRecord)
     print("准备查询拍摄记录", datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
     statement = (
         select(PhotoRecord)
@@ -632,7 +632,6 @@ def get_photo_records(page: int = 1, size: int = 5):
             .join(DeviceConfig, PhotoRecord.action_id == DeviceConfig.id)
         )
         list_item = session.exec(query).mappings().all()
-        session.close()
         list.append(
             {
                 "goods_art_no": item.goods_art_no,
@@ -667,7 +666,7 @@ def get_last_photo_record():
 
 
 @app.get("/get_photo_record_detail", description="通过货号获取拍照记录详情")
-def get_photo_records(goods_art_no: str = None):
+def get_photo_record_detail(goods_art_no: str = None):
     if goods_art_no == None:
         return {"code": 1, "msg": "参数错误", "data": None}
     session = SqlQuery()

+ 1 - 1
python/config.ini

@@ -12,7 +12,7 @@ port=7074
 debug=true
 env=dev
 # 线程数
-works=3
+works=5
 project=惠利玛
 is_upload=true
 [log]

+ 7 - 1
python/databases.py

@@ -15,6 +15,7 @@ sqlite_url = f"sqlite:///{sqlite_file_name}"
 engine = create_engine(
     sqlite_url,
     echo=False,
+    connect_args={"check_same_thread": False},  # 允许多线程访问
     pool_size=10,
     max_overflow=20,
     pool_timeout=30,
@@ -116,11 +117,15 @@ class CRUD:
         db_obj = session.get(self.model, obj_id)
         for key, value in kwargs.items():
             setattr(db_obj, key, value)
+        session.commit()
+        session.refresh(db_obj)
         return db_obj
 
     def delete(self, session: Session, obj_id: int):
         db_obj = session.get(self.model, obj_id)
         session.delete(db_obj)
+        session.commit()
+        session.refresh()
 
     # 恢复 updateConditions 方法
     def updateConditions(self, session: Session, conditions: Dict, **kwargs):
@@ -176,7 +181,7 @@ def batch_insert_sys_configs(session: Session, data_list: list):
     session.commit()  # 合并事务提交
 
 # 插入照片记录
-def insert_photo_records(
+async def insert_photo_records(
     image_deal_mode: int, goods_art_no: str, image_index: int, action_id: int
 ):
     with SqlQuery() as session:  # 使用上下文管理器复用会话
@@ -190,6 +195,7 @@ def insert_photo_records(
         device_config = PhotoRecord(**data)
         session.add(device_config)
         session.commit()
+        session.refresh(device_config)
         record_id = device_config.id
         return True, record_id
 

+ 10 - 1
python/index.py

@@ -27,6 +27,7 @@ async def run_server():
         port=int(PORT),
         reload=isDebug,
         workers=int(APP_WORKS),
+        loop="auto",
     )
     server = uvicorn.Server(config)
     await server.serve()
@@ -38,11 +39,19 @@ async def main():
 
 
 if __name__ == "__main__":
+    if sys.platform == "win32":
+        asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
+
     signal.signal(signal.SIGINT, handle_shutdown)
     signal.signal(signal.SIGTERM, handle_shutdown)
     print("python server is running at port:", PORT)
     print("python server is running at port:", APP_RUN)
-    asyncio.run(main())
+
+    loop = asyncio.new_event_loop()
+    try:
+        loop.run_until_complete(main())
+    finally:
+        loop.close()
     # isDebug = True if IS_DEBUG == "true" else False
     # uvicorn.run(
     #     app=APP_RUN,

+ 1 - 1
python/mcu/DeviceControl.py

@@ -1405,7 +1405,7 @@ class DeviceControl(BaseClass, metaclass=SingletonType):
                     image_counts += 1
                     # 批量插入
                     image_deal_mode = 0 if action_info == "执行左脚程序" else 1
-                    state,record_id = insert_photo_records(
+                    state,record_id = await insert_photo_records(
                         image_deal_mode=image_deal_mode,
                         goods_art_no=goods_art_no,
                         image_index=idx,

+ 1 - 1
python/mcu/RemoteControlV2.py

@@ -289,7 +289,7 @@ class RemoteControlV2(BaseClass):
                 action_id = AllTabConfig[len(AllTabConfig) - 1].id
             image_index = record.image_index + 1
             self.photo_take_state = 1
-            state, record_id = insert_photo_records(
+            state, record_id = await insert_photo_records(
                 record.image_deal_mode,
                 record.goods_art_no,
                 image_index,

+ 2 - 2
python/sockets/socket_client.py

@@ -39,6 +39,6 @@ class SocketClient:
 
 # 创建全局 SocketManager 实例
 socket_manager = SocketClient(f"ws://{APP_HOST}:{PORT}/ws")
-def sendMsg(code=0, msg="", data=None):
+async def sendMsg(code=0, msg="", data=None):
     '''通用客户端发送消息机制'''
-    asyncio.run(socket_manager.send_message(code=code, msg=msg, data=data))
+    await socket_manager.send_message(code=code, msg=msg, data=data)

+ 13 - 6
python/sockets/socket_server.py

@@ -35,6 +35,7 @@ async def updateDataRecord(PhotoFilename, id):
 
 @app.websocket("/ws")
 async def websocket_endpoint(websocket: WebSocket):
+    # await websocket.accept()
     await conn_manager.connect(websocket)
     active_connections.add(websocket)
     smart_shooter.websocket = websocket
@@ -116,12 +117,14 @@ async def websocket_endpoint(websocket: WebSocket):
                         msg_type="smart_shooter_enable_preview",
                     )
                     await conn_manager.send_personal_message(data, websocket)
+        # async def runListen():
+        #     smart_shooter.callback_listen = MsgCallback
+        #     await smart_shooter.connect_listen()
+        # asyncio.create_task(runListen())
         smart_shooter.callback_listen = MsgCallback
-        async def runListen():
-            await smart_shooter.connect_listen()
-        await asyncio.gather(
-            handler_messages(), send_message(), runListen()
-        )
+        loop = asyncio.get_event_loop()
+        loop.run_in_executor(None, smart_shooter.connect_listen)  # 后台线程启动监听
+        await asyncio.gather(handler_messages(), send_message())
     except WebSocketDisconnect:
         # socket_manager.close()
         print("Client disconnected")
@@ -130,7 +133,11 @@ async def websocket_endpoint(websocket: WebSocket):
         # if websocket:
         #     await websocket.close()
 
-
+@app.on_event("startup")
+async def startup_event():
+    loop = asyncio.get_event_loop()
+    loop.run_in_executor(None, smart_shooter.connect_listen)
+    print("监听服务已启动")
 @app.on_event("shutdown")
 async def shutdown_event():
     print("Shutting down...")