Về Kamaelia, câu trả lời trên không thực sự bao hàm lợi ích ở đây. Cách tiếp cận của Kamaelia cung cấp một giao diện thống nhất, không hoàn hảo về mặt thực dụng, để xử lý các luồng, trình tạo & quy trình trong một hệ thống duy nhất để đồng thời.
Về cơ bản, nó cung cấp một phép ẩn dụ về một thứ đang hoạt động có hộp thư đến và hộp thư đi. Bạn gửi tin nhắn đến hộp thư đi và khi được kết nối với nhau, tin nhắn sẽ chuyển từ hộp thư đi đến hộp thư đến. Phép ẩn dụ / API này vẫn giống nhau cho dù bạn đang sử dụng trình tạo, luồng hoặc quy trình hoặc nói với các hệ thống khác.
Phần "không hoàn hảo" là do cú pháp chưa được thêm vào cho hộp thư đến và hộp thư đi (mặc dù điều này đang được thảo luận) - tập trung vào tính an toàn / khả năng sử dụng trong hệ thống.
Lấy ví dụ về người tiêu dùng sản xuất bằng cách sử dụng ren trần ở trên, điều này trở thành điều này ở Kamaelia:
Pipeline(Producer(), Consumer() )
Trong ví dụ này, không quan trọng nếu đây là các thành phần có ren hay không, sự khác biệt duy nhất giữa chúng từ góc độ sử dụng là kính cơ bản cho thành phần. Các thành phần của trình tạo giao tiếp bằng cách sử dụng danh sách, các thành phần phân luồng bằng Queue.Queues và xử lý dựa trên os.pipes.
Tuy nhiên, lý do đằng sau cách tiếp cận này là khiến việc gỡ lỗi khó trở nên khó hơn. Trong phân luồng - hoặc bất kỳ đồng thời bộ nhớ dùng chung nào mà bạn có, vấn đề số một mà bạn gặp phải là cập nhật dữ liệu được chia sẻ vô tình bị hỏng. Bằng cách sử dụng thông báo chuyển bạn loại bỏ một lớp lỗi.
Nếu bạn sử dụng luồng và khóa trần ở mọi nơi, bạn thường đang làm việc với giả định rằng khi bạn viết mã, bạn sẽ không mắc bất kỳ lỗi nào. Trong khi tất cả chúng ta đều khao khát điều đó, thì điều đó rất hiếm khi xảy ra. Bằng cách gói gọn hành vi khóa ở một nơi, bạn đơn giản hóa những nơi có thể xảy ra sai sót. (Trình xử lý ngữ cảnh trợ giúp, nhưng không trợ giúp với các cập nhật ngẫu nhiên bên ngoài trình xử lý ngữ cảnh)
Rõ ràng là không phải mọi đoạn mã đều có thể được viết dưới dạng truyền thông điệp và kiểu chia sẻ, đó là lý do tại sao Kamaelia cũng có một bộ nhớ giao dịch phần mềm đơn giản (STM), đây là một ý tưởng thực sự gọn gàng với một cái tên khó chịu - nó giống điều khiển phiên bản hơn cho các biến - tức là kiểm tra một số biến, cập nhật chúng và cam kết trở lại. Nếu bạn có một cuộc đụng độ, bạn rửa sạch và lặp lại.
Các liên kết có liên quan:
Dù sao, tôi hy vọng đó là một câu trả lời hữu ích. FWIW, lý do cốt lõi đằng sau thiết lập của Kamaelia là làm cho đồng thời an toàn hơn và dễ sử dụng hơn trong các hệ thống python mà không cần vẫy đuôi của con chó. (tức là một thùng lớn các thành phần
Tôi có thể hiểu tại sao câu trả lời khác của Kamaelia lại bị sửa đổi, vì ngay cả đối với tôi, nó giống như một quảng cáo hơn là một câu trả lời. Là tác giả của Kamaelia, thật vui khi thấy sự nhiệt tình mặc dù tôi hy vọng điều này chứa nội dung phù hợp hơn một chút :-)
Và đó là cách nói của tôi, xin lưu ý rằng câu trả lời này theo định nghĩa là thiên vị, nhưng đối với tôi, mục đích của Kamaelia là cố gắng và kết hợp thực tiễn tốt nhất của IMO là gì. Tôi khuyên bạn nên thử một vài hệ thống và xem cái nào phù hợp với bạn. (ngoài ra nếu điều này không phù hợp với việc tràn ngăn xếp, xin lỗi - tôi mới tham gia diễn đàn này :-)