小编use*_*175的帖子

如何在 Python BaseHTTPRequestHandler 中处理分块编码?

我有以下简单的 Web 服务器,利用 Python 的http模块:

import http.server
import hashlib


class RequestHandler(http.server.BaseHTTPRequestHandler):
    protocol_version = "HTTP/1.1"

    def do_PUT(self):
        md5 = hashlib.md5()

        remaining = int(self.headers['Content-Length'])
        while True:
            data = self.rfile.read(min(remaining, 16384))
            remaining -= len(data)
            if not data or not remaining:
                break
            md5.update(data)
        print(md5.hexdigest())

        self.send_response(204)
        self.send_header('Connection', 'keep-alive')
        self.end_headers()


server = http.server.HTTPServer(('', 8000), RequestHandler)
server.serve_forever()
Run Code Online (Sandbox Code Playgroud)

当我使用curl上传文件时,效果很好:

curl -vT /tmp/test http://localhost:8000/test

由于文件大小是预先已知的,curl 将发送一个Content-Length: 5标头,因此我可以知道应该从套接字读取多少内容。

但如果文件大小未知,或者客户端决定使用chunked传输编码,则此方法会失败。

可以使用以下命令进行模拟:

curl -vT /tmp/test -H "Transfer-Encoding: chunked" http://localhost:8000/test

如果我从self.rfile该块的过去读取,它将永远等待并挂起客户端,直到它断开 TCP 连接,其中self.rfile.read将返回一个空数据,然后它会跳出循环。 …

python http chunked

7
推荐指数
1
解决办法
1万
查看次数

Docker buildkit 缓存位置/大小和 ID

有 Docker buildkit:https : //github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/experimental.md 它有一个额外的选项RUN(除其他外):--mount=type=cache.

我从文档中无法弄清楚的是:

  1. 该缓存存储在哪里?
  2. 如何删除/检查它?
  3. buildkit 如何决定缓存去哪里?例如,如果我在两个位置有相同的 Dockerfile,缓存是否相同?缓存的关键是什么?
  4. ID 选项仍然不明确。如果我在不同的 dockerfile 中指定相同的 ID,它们会引用相同的缓存吗?

docker dockerfile

6
推荐指数
2
解决办法
906
查看次数

将groupby选定的列移动到新的pandas列中作为字典

我在python中有以下pandas DataFrame:

df = pd.DataFrame({'id': [1, 1, 2, 2, 3],
                   'field1': [1, 2, 3, 4, 5],
                   'field2': ['a', 'b', 'c', 'd', 'e']})
Run Code Online (Sandbox Code Playgroud)
    id  field1  field2
0   1   1       a
1   1   2       b
2   2   3       c
3   2   4       d
4   3   5       e
Run Code Online (Sandbox Code Playgroud)

我想对上面的表进行分组,id然后将该组中所有选定的列值移动到新列中,作为python词典的列表。

因此,从以上我想得出这一点:

    id  fields
0   1   [{'field1': 1, 'field2': 'a'}, {'field1': 2, 'field2': 'b'}]
2   2   [{'field1': 3, 'field2': 'c'}, {'field1': 4, 'field2': 'd'}]
4   3   [{'field1': 5, 'field2': 'e'}]
Run Code Online (Sandbox Code Playgroud)

我可以使用以下python代码实现此目的:

    id  field1 …
Run Code Online (Sandbox Code Playgroud)

python dictionary dataframe pandas

3
推荐指数
1
解决办法
41
查看次数

标签 统计

python ×2

chunked ×1

dataframe ×1

dictionary ×1

docker ×1

dockerfile ×1

http ×1

pandas ×1