2009-04-27 42 views
5

Tôi có một dịch vụ Python chạy dài và tôi muốn biết thời gian đồng hồ treo tường tích lũy đã được chi tiêu bởi bất kỳ chủ đề nào có thể chạy được (tức là các chủ đề không bị chặn vì một số lý do khác) đang chờ GIL. Có cách nào làm dễ hơn không? Ví dụ: có lẽ tôi có thể định kỳ truy xuất một số truy cập vào tệp nhật ký của nó.Có cách nào dễ dàng để biết số tiền được dành để đợi GIL Python không?

Động lực cơ bản của tôi là loại trừ GIL như là nguồn gốc của độ trễ phản ứng bí ẩn từ các quy trình chạy dài này. Không có lý do cụ thể nào để nghi ngờ GIL (ngoại trừ việc nó sẽ phù hợp với các triệu chứng), nhưng các hình thức khai thác gỗ khác vẫn chưa bật lên, vì vậy, nếu nó dễ dàng, sẽ rất tuyệt khi có thông tin này .

Trả lời

3

Tôi không nghĩ rằng có một cách dễ dàng. Có lẽ có một cách khó xử, liên quan đến việc xây dựng lại Python để đi qua danh sách PyThreadState và đếm các chủ đề mỗi lần khóa được mua lại, nhưng tôi nghi ngờ nó đáng để nỗ lực!

Tôi biết đây là câu hỏi đầu cơ nhưng nếu bạn thậm chí còn lo ngại về việc có sự chậm trễ do luồng có thể thận trọng khi chuyển sang mô hình đa xử lý thay vì mô hình đa luồng. Vì các quy trình đều an toàn hơn và có khả năng mở rộng hơn trong Python nên chúng hầu như luôn là lựa chọn tốt nhất nếu thực tế.

0

Giờ đây bạn có thể sử dụng hồ sơ GIL sử dụng gil_load.

Xem my answer với câu hỏi khác.

+0

Dự án gil_load cho bạn biết tần suất GIL được giữ (nghĩa là, * ít nhất một * chuỗi là runnable). Câu hỏi sẽ hỏi tần suất GIL được chờ đợi (có nghĩa là, * ít nhất hai luồng * là runnable). Làm thế nào để bạn đạt được điều đó với gil_load? –

Các vấn đề liên quan