2011-09-11 20 views

Trả lời

4

Một sử dụng sẽ để đảm bảo rằng hoạt động (s) chạy nguyên tử, ví dụ:

sw_interval = sys.getswitchinterval() 
try: 
    # Setting the switch interval to a very big number to make sure that their will be no 
    # thread context switching while running the operations that came after. 
    sys.setswitchinterval(sys.maxint) 
    # Expressions run here will be atomic .... 
finally: 
    sys.setswitchinterval(sw_interval) 

Một trường hợp sử dụng sẽ được điều chỉnh mã của bạn đặc biệt khi bạn đang phải đối mặt với convoy effect (hoặc bất kỳ cạnh trường hợp GIL mới cho hiệu suất kém). Có lẽ (chỉ có thể) thay đổi khoảng thời gian chuyển đổi ngữ cảnh có thể cung cấp cho bạn tốc độ nhanh hơn.

Disclaimer: Phương pháp đầu tiên bố trí ở trên là xem xét tối kỳ diệu và nó hoàn toàn không được khuyến khích (các threading.Lock -likes được ưa thích trong trường hợp sử dụng). Nói chung, tôi không nghĩ rằng việc thay đổi khoảng thời gian chuyển ngữ cảnh chủ đề là điều cần làm trong các trường hợp bình thường. Tôi sẽ diễn giải những gì Tim Peters đã nói về metaclasses: changing thread context switch interval is deeper magic than 99% of people are going to need.

+0

Khi ứng dụng bị ràng buộc IO, bạn có _increase_ hoặc _decrease_ không? –

+2

@Matt: Trên thực tế chỉ có IO ràng buộc chủ đề không cung cấp cho một vấn đề bởi vì mỗi khi một thread thực hiện một IO ràng buộc hướng dẫn nó phát hành GIL, nhưng vấn đề có thể được nhìn thấy khi sử dụng một IO ràng buộc thread với CPU thread như đã giải thích trong này vấn đề (http://bugs.python.org/issue7946) trong một trường hợp như thế này (một lần nữa) có thể giảm khoảng thời gian chuyển đổi có thể dẫn đến hiệu suất tốt hơn bởi vì các chủ đề bị ràng buộc IO sẽ không phải đợi lâu hơn nữa nếu chúng không chặn ở tất cả. – mouad

+0

+1 để tham chiếu ma thuật 'tối' trong phương pháp này –

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