feat: 添加线程锁
This commit is contained in:
parent
be409273bb
commit
78da5f3873
73
GxPrint.py
73
GxPrint.py
|
@ -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__':
|
||||||
|
|
Loading…
Reference in New Issue