2011-09-19 27 views
8

Vâng, điều đầu tiên trong tâm trí của tôi là làm thế nào để đảm bảo rằng nếu pydispatcher hoặc pubsub có an toàn hay không. pubsub có thể là một chút khó khăn hoặc phức tạp để tìm ra nhưng pydispatcher có vẻ đơn giản để nhận ra. Sau đó, tôi bắt đầu tự hỏi làm thế nào để tìm ra nếu một mô-đun python thread-safe hay không. Bất kỳ chẩn đoán nào?Làm thế nào để đánh giá một mô-đun python là an toàn thread hay không?

Trả lời

1

Từ quan điểm lý thuyết: Không có thuật toán nào thực hiện điều này cho một chương trình tùy ý. Nó giống như halting problem.

Bạn có thể kiểm tra các mô-đun đã sử dụng và kiểm tra xem các mô đun này có được đảm bảo an toàn không. Nhưng không có cách chung để kiểm tra mã byte của một mô-đun cho an toàn luồng.

+1

Anh ấy nói "bất kỳ chẩn đoán nào", anh ấy không tìm kiếm giải pháp chính xác, chung chung. Tôi cũng nghi ngờ anh ấy đang nói về việc nhìn vào bytecode. – agf

2

Đối với việc xác định nếu một thư viện hoặc áp dụng là chủ đề an toàn, không tác giả đầu vào, tôi sẽ tìm kiếm cơ chế đề đồng bộ hóa: http://effbot.org/zone/thread-synchronization.htm hoặc rằng nó có chứa các phương pháp luồng: http://docs.python.org/library/threading.html

Tuy nhiên, không ai trong số đó sẽ cho bạn biết cách sử dụng API theo cách an toàn. Thực tế bất cứ điều gì có thể được nhồi bên trong một đối tượng thread và truyền đạt để sử dụng các đối tượng đồng bộ hóa thread.

Đối với một cái gì đó như pubsub người ta có thể tạo ra một lớp kết thúc tốt đẹp các API và giao tiếp qua hàng đợi độc quyền. Nếu pubsub sống trong cùng một chuỗi như wx chẳng hạn, thì một API có thể được tạo ra để tiêm các thông điệp vào Hàng đợi bằng cách sử dụng một API luồng để gửi tin nhắn. Sau đó, một vòng lặp pubsub hoặc bộ đếm thời gian có thể được theo dõi hàng đợi. Sau đó nó sẽ gửi tin nhắn. Một trong những vấn đề với gói một cái gì đó như pubsub là một nơi nào đó nó sẽ yêu cầu bỏ phiếu. Nó có thể được thực hiện trong suốt nếu việc bỏ phiếu được thực hiện bởi bộ tính giờ. Mỗi thread sẽ phải cấp phát một bộ đếm thời gian để nhận tin nhắn nếu pubsub không nằm trong chủ đề đó. Có thể có nhiều cách tiếp cận thanh lịch hơn cho điều này, nhưng tôi không biết về chúng.

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