python / python/cpython

`csv.reader` calls the state machine for every character needlessly

Đang mở
#138,213 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

extension-modules performance stdlib type-feature
Ngôn ngữ chính
Python
Star
77.2k
Fork
35.9k
Chỉ số merge pull request
Chỉ số pull request đang chờ

Mô tả

Bug report

Bug description:

The state machine:

https://github.com/python/cpython/blob/bbcb75c986c47887e6c0757e63d59cd7af544f39/Modules/_csv.c#L726

is called for every character processed by csv.reader:

https://github.com/python/cpython/blob/bbcb75c986c47887e6c0757e63d59cd7af544f39/Modules/_csv.c#L969-L974

Even putting aside sophisticated SIMD or branching optimizations, it could be more efficient.

Most time is likely to be spent in a field (IN_FIELD, IN_QUOTED_FIELD). It's more efficient to find interesting characters (ie: escapes, quotes) and just copy the whole slice in between.

CPython versions tested on:

CPython main branch

Operating systems tested on:

Linux

Linked PRs
  • gh-138214

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Hướng nghiên cứu

Bắt đầu trong Modules/_csv.c, tại máy trạng thái quanh dòng 726 và phần xử lý csv.reader quanh các dòng 969-974. Xem xét PR được liên kết gh-138214 trước khi bắt đầu, sau đó xác minh rằng mọi thay đổi đều giữ nguyên hành vi của csv.reader đồng thời tránh các lần gọi máy trạng thái không cần thiết cho từng ký tự.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
c, python
Lĩnh vực
backend
Loại issue
Lỗi
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
25/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.