Tôi hiện đang viết một tập lệnh Python để xử lý khoảng 10.000 tài liệu đầu vào. Dựa trên đầu ra tiến độ của tập lệnh, tôi nhận thấy rằng 400 tài liệu đầu tiên được xử lý rất nhanh và sau đó tập lệnh chậm lại mặc dù các tài liệu đầu vào đều có cùng kích thước.Cách Pythonic và hiệu quả để xác định nhiều regex để sử dụng trong nhiều lần lặp
Tôi giả định điều này có thể liên quan đến thực tế rằng hầu hết quá trình xử lý tài liệu được thực hiện với các regex mà tôi không lưu dưới dạng đối tượng regex khi chúng đã được biên dịch. Thay vào đó, tôi biên dịch lại các regex bất cứ khi nào tôi cần chúng.
Vì kịch bản của tôi có khoảng 10 hàm khác nhau, tất cả đều sử dụng khoảng 10 - 20 mẫu regex khác nhau, tôi tự hỏi điều gì sẽ hiệu quả hơn trong Python để tránh biên dịch lại các mẫu regex lặp đi lặp lại (trong Perl Tôi chỉ có thể bao gồm một sửa đổi //o
).
giả định của tôi là nếu tôi lưu trữ các đối tượng regex trong các chức năng cá nhân sử dụng
pattern = re.compile()
kết quả đối tượng regex sẽ không được giữ lại cho đến khi gọi tiếp theo của chức năng cho phiên bản kế tiếp (mỗi hàm được gọi nhưng một lần cho mỗi tài liệu).
Tạo danh sách toàn cầu các regex được biên dịch trước có vẻ là một tùy chọn không hấp dẫn vì tôi cần lưu trữ danh sách các regex ở một vị trí khác trong mã của tôi so với nơi chúng thực sự được sử dụng.
Mọi lời khuyên ở đây về cách xử lý gọn gàng và hiệu quả?
Không, nó phải làm với thực tế là * bộ nhớ cache của bạn bị cạn kiệt *. –
Bạn đã lược tả mã của mình chưa? – Daenyth
là tất cả các chức năng được áp dụng cho tất cả các tài liệu? bởi vì nếu như vậy, @larsmans trả lời, trong khi tốt, dường như không giải thích sự chậm lại sau 400 tài liệu. tôi sẽ đề nghị lược tả hơn là đoán ... –