Tôi đang chạy ứng dụng Flask trên Heroku bằng gunicorn với nhân viên của sự kiện. Một tuyến đường cụ thể trên ứng dụng của tôi thường xuyên nhận được dữ liệu POST (x-www-form-urlencoded) với một số trường khá chunky - theo thứ tự tối đa 500KB.Bình trên Heroku: request.form cực kỳ chậm với dữ liệu POST lớn?
Điều này hoạt động tốt khi chạy cục bộ, nhưng trên Heroku, yêu cầu tuyến đường đó mất từ 5 đến 30 giây để hoàn thành - và gần như 100% thời gian được sử dụng trong lần truy cập đầu tiên theo yêu cầu.http:
t = time.time()
action = str(request.form['action'])
dt = time.time() - t # Often 10 seconds or more!
Điều này cũng được xác nhận bằng truy vấn yêu cầu chậm của Newrelic. Có một vài phần nghìn giây ở đây hoặc ở đó cho các hoạt động cơ sở dữ liệu, và sau đó một đoạn lớn thời gian trong mã Python, dường như đã chờ đợi một số i/o, vì thời gian CPU được báo cáo thường nhỏ hơn một phần nghìn giây.
Tôi hoàn toàn không thể tái tạo điều này trong môi trường cục bộ bằng cách sử dụng cùng thiết lập gunicorn/eventlet tôi đang sử dụng trong sản xuất. Ngay cả máy chủ WSGI gỡ lỗi tích hợp cũng nhanh như chớp trên các yêu cầu này.
Có ai có bất kỳ ý tưởng nào có thể xảy ra không? Đó có phải là một vấn đề với Flask, hoặc một cái gì đó tôi chỉ cần liên hệ với Heroku hỗ trợ về?
Bạn đã thử đưa ứng dụng lên trên sandbox miễn phí của dotcloud chưa? Tôi đã sử dụng nó cho một ứng dụng Flask nhỏ gần đây, và nó đã chết đơn giản. Có thể thử nghiệm ứng dụng của bạn ở đó hoặc một nơi nào đó tương tự để xem liệu bạn có thể cô lập vấn đề với Heroku hoặc với Flask hoặc ứng dụng của bạn không? –
Tôi thứ hai @AllanAnderson - hãy thử thiết lập tương tự trên một nhà cung cấp khác - nếu nó bị hỏng theo cách tương tự, bạn có thể cung cấp một số dữ liệu mẫu gây ra sự cố không? –
* "và gần như 100% thời gian được chi tiêu trong lần truy cập đầu tiên vào request.form" * Có thể bạn đang gặp phải tác động của việc bỏ dyno không? https://devcenter.heroku.com/articles/dynos#dyno-idling – Dominic