feat: 添加线程锁

This commit is contained in:
caoqianming 2025-09-10 16:08:51 +08:00
parent be409273bb
commit 78da5f3873
1 changed files with 43 additions and 32 deletions

View File

@ -20,7 +20,8 @@ from pystray import MenuItem
import socket import socket
import logging import logging
from logging.handlers import RotatingFileHandler from logging.handlers import RotatingFileHandler
import sys import time
import threading
CUR_DIR = os.path.dirname(os.path.abspath(__file__)) CUR_DIR = os.path.dirname(os.path.abspath(__file__))
@ -142,43 +143,53 @@ def save_pdf_from_binary(pdf_binary, file_path):
with open(file_path, 'wb') as file: with open(file_path, 'wb') as file:
file.write(pdf_binary) file.write(pdf_binary)
request_lock = threading.Lock()
@app.route('/prints/', methods=['POST', 'OPTIONS']) @app.route('/prints/', methods=['POST', 'OPTIONS'])
def str_printer(): def str_printer():
if request.method == 'OPTIONS': # 跨域请求预检 if request.method == 'OPTIONS': # 跨域请求预检
return jsonify({"message": "OK"}), 200 return jsonify({"message": "OK"}), 200
print_commands = request.json.get('printer_commands', None) if not request_lock.acquire(timeout=30):
print_name = request.json.get('printer_name', None) logger.warning("打印请求超时,系统繁忙")
tsclibrary = ctypes.WinDLL(".//TSCLIB.dll") return jsonify({
"err_msg": "系统繁忙,请稍后再试",
"err_code": "system_busy"
}), 503
try: try:
tsclibrary.openportW(print_name) print_commands = request.json.get('printer_commands', None)
except Exception as e: print_name = request.json.get('printer_name', None)
logger.error(f"打印机名称无效: {e}") tsclibrary = ctypes.WinDLL(".//TSCLIB.dll")
return jsonify({"err_msg": "打印机名称无效","err_code": "printer_name_error"}), 400 try:
tsclibrary.clearbuffer() tsclibrary.openportW(print_name)
try: except Exception as e:
for item in print_commands: logger.error(f"打印机名称无效: {e}")
if 'WINTEXT' in item: return jsonify({"err_msg": "打印机名称无效","err_code": "printer_name_error"}), 400
item_list = item.replace('WINTEXT ', '').split(',') tsclibrary.clearbuffer()
tsclibrary.windowsfontW( try:
item_list[0], for item in print_commands:
item_list[1], if 'WINTEXT' in item:
item_list[2], item_list = item.replace('WINTEXT ', '').split(',')
item_list[3], tsclibrary.windowsfontW(
item_list[4], item_list[0],
item_list[5], item_list[1],
item_list[6], item_list[2],
item_list[7]) item_list[3],
else: item_list[4],
tsclibrary.sendcommandW(item) item_list[5],
tsclibrary.closeport() item_list[6],
logger.info("打印成功") item_list[7])
except Exception as e: else:
logger.error(f"打印失败: {e}") tsclibrary.sendcommandW(item)
icon.notify(message=f"打印失败: {e}", title="标签打印") tsclibrary.closeport()
return jsonify({"err_msg": "打印失败", "err_code": "print_failed"}), 500 logger.info("打印成功")
except Exception as e:
logger.error(f"打印失败: {e}")
icon.notify(message=f"打印失败: {e}", title="标签打印")
return jsonify({"err_msg": "打印失败", "err_code": "print_failed"}), 500
return jsonify({}), 200 return jsonify({}), 200
finally:
request_lock.release()
if __name__ == '__main__': if __name__ == '__main__':