2012-04-22 30 views
9

Trong tập lệnh Python, tôi muốn đặt giới hạn bộ nhớ cho một cuộc gọi chức năng nhất định. Tôi đã xem how to limit heap size; tuy nhiên, tôi không muốn giới hạn bộ nhớ của toàn bộ quá trình Python đang chạy - tức là thiết lập giới hạn bộ nhớ trước và sau cuộc gọi hàm.Python: đặt giới hạn bộ nhớ cho một chức năng cụ thể gọi

Có cách nào để thực hiện cuộc gọi chức năng với một lượng bộ nhớ nhất định, để giới hạn bộ nhớ không ảnh hưởng đến người gọi không?

+9

Mở một quy trình mới và giới hạn kích thước heap. – JBernardo

+2

Hoặc, về lý thuyết bạn cũng có thể kiểm tra khung hiện tại và đệ quy xây dựng một cây với tất cả các đối tượng trong đó và ước tính bộ nhớ được sử dụng, nhưng nó không đơn giản. Kiểm tra các bộ nhớ như profppy.heapy làm như thế nào. –

+5

Nhưng câu hỏi thực sự là, tại sao bạn muốn làm điều đó? Không có tính năng tích hợp cho điều này, vì vậy có thể bạn đang tiếp cận vấn đề theo cách sai. –

Trả lời

2

Không, điều này là không thể. Python không theo dõi các chức năng nào chịu trách nhiệm phân bổ bộ nhớ mới, cũng như không sử dụng libc, vì vậy không có cách nào để giới hạn mức sử dụng bộ nhớ chỉ bằng một hàm duy nhất. Để thực hiện điều này, bạn sẽ phải sửa đổi Python để sử dụng chức năng mới để cấp phát bộ nhớ yêu cầu nó được chỉ định chức năng Python chịu trách nhiệm, để nó có thể từ chối cấp phát bộ nhớ nếu chức năng đó đi qua giới hạn của nó.

Cách duy nhất khác để thực hiện điều này thực sự là thực hiện chức năng trong một quy trình riêng biệt với bộ nhớ hạn chế, như @ JBernardo nói.

Để triển khai hộp cát, đã có các triển khai được thử nghiệm tương đối tốt. Có lý do gì mà bạn không thể sử dụng chúng? Cụ thể, xem sandboxed VM của PyPy và Zope sandbox.

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