Khóa là một giải pháp khả thi, nhưng tôi thích kiến trúc tổng quát của việc có mỗi tài nguyên bên ngoài (bao gồm một tệp) được xử lý bởi một chuỗi riêng biệt. Các chủ đề khác gửi yêu cầu công việc tới luồng chuyên dụng trên một cá thể Queue.Queue (và cung cấp một hàng đợi riêng của chúng như là một phần của tham số yêu cầu công việc nếu chúng cần kết quả), chuỗi chuyên dụng dành phần lớn thời gian chờ đợi trên .get
hàng đợi và bất cứ khi nào nó nhận được một yêu cầu đi vào và thực hiện nó (và trả về kết quả trên hàng đợi đã được chuyển vào nếu cần).
Tôi đã cung cấp các ví dụ chi tiết về phương pháp này, ví dụ: trong "Python in a Nutshell". Hàng đợi của Python thực chất là an toàn và đơn giản hóa cuộc sống của bạn rất nhiều.
Trong số những ưu điểm của kiến trúc này là nó dịch trơn tru để multiprocessing nếu và khi bạn quyết định chuyển một số công việc để một quá trình riêng biệt thay vì một thread riêng biệt (ví dụ như để tận dụng đa lõi) - multiprocessing
cung cấp riêng của mình làm việc theo kiểu Queue
để thực hiện chuyển đổi mượt mà như tơ ;-).
Nguồn
2010-02-20 14:02:37
Nếu tôi viết một thư viện phải an toàn chỉ nhưng không phải lúc nào cũng được sử dụng trong chuỗi. Tôi có nên sử dụng phương pháp này hoặc xem một khóa không? Tôi không chắc liệu thư viện của tôi có nên sinh ra các chủ đề mới nếu nó chỉ được sử dụng một luồng không. Giải pháp tốt nhất cho một số biến của chủ đề có thể là một trong những gì? –