python - Python - 使用 HTTPServer 处理并发 POST 请求并保存到文件
问题描述
我有下面的代码,我想用它来接收带有数据的 POST 请求,然后我将使用这些数据在标签打印机上打印标签。为了打印标签,我需要使用打印命令编写一个文件,然后lp
通过命令行执行命令将文件复制到标签打印机。
我遇到的问题是多个人可能同时打印标签。所以我的问题是我是否必须更改下面的代码才能使用ThreadingMixIn
以处理并发 POST 请求,或者我可以保留代码原样并且在并发场景中的辅助请求只会有一点延迟(即任何进一步的请求将排队并且不会丢失)?
如果我必须采用线程方式,lp
如果现在有多个线程试图写入同一个文件,这将如何影响文件的写入和后续的命令行调用?
请注意,有多个标签打印机正在通过打印队列 (CUPS) 进行访问。
import json
from http.server import HTTPServer, BaseHTTPRequestHandler
from io import BytesIO
class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.end_headers()
self.wfile.write(b'Hello, world!')
def do_POST(self):
content_length = int(self.headers['Content-Length'])
body = self.rfile.read(content_length)
try:
result = json.loads(body, encoding='utf-8')
self.send_response(200)
self.end_headers()
response = BytesIO()
response.write(b'This is POST request. ')
response.write(b'Received: ')
response.write(body)
self.wfile.write(response.getvalue())
except Exception as exc:
self.wfile.write('Request has failed to process. Error: %s', exc.message)
httpd = HTTPServer(('localhost', 8000), SimpleHTTPRequestHandler)
httpd.serve_forever()
解决方案
为什么不尝试使用唯一的文件名?通过这种方式,您可以确定不会发生名称冲突。看看https://docs.python.org/2/library/tempfile.html,考虑 NamedTemporaryFile 函数。您应该使用 delete=False,否则文件在 close() 之后立即被删除。
推荐阅读
- node.js - TypeError:无法读取未定义的属性(读取“命令”)
- events - 如何在 DDD 中通过订单进行交货
- python - 在我的情况下,迭代 Pandas 行的最佳方法是什么?
- c - 具有不同节点的 C (Linux) 中的叉树
- swift - Swift 包无法解析
- c - 在 c 编程中用多个字符打破 while 循环
- python - 获取 href 值 BeautifulSoup
- rest - 在 Google Assistant 之外使用 Actions REST API?
- html - D3.JS - 创建链接到 csv 文件的 HTML 表
- php - 如何在 Woocommerce 的“本地取货”中添加超过美元金额的免费送货功能