2012-05-13 30 views
16

Tôi bắt đầu học python một vài tháng trước, sau đó tôi tìm thấy Jython.jython đa luồng

Chuỗi làm việc có hoạt động đúng trong Jython, vì nó doesn't have a GIL? Nếu vậy, bạn có thể đề xuất một cuốn sách tốt về đồng thời (luồng)?

+3

Đây là một câu hỏi hay, tôi thành thật không biết câu trả lời nhưng tôi có đa luồng với cả hai vì vậy có thể một câu hỏi hay hơn là: 'Tôi có cần sử dụng đa xử lý python hay luồng của Java' không? Tôi chắc chắn rằng nó hoạt động chỉ không chắc chắn mà một trong những bạn phải sử dụng kể từ khi jython là một sự pha trộn của cả hai. – Lostsoul

+0

Bạn có nghĩa là Jpython hay Jython? Đây là loại câu hỏi mở mà không thực sự phù hợp với SO, btw. –

+0

Theo [câu hỏi này (http://stackoverflow.com/questions/4227269/hidden-multithreading-bottlenecks-in-jython), câu trả lời là có. Tôi hiểu rằng có thể truy cập vào các thư viện đa luồng python hoặc hỗ trợ đồng thời java thông qua jython. –

Trả lời

5

Cuốn sách hay nhất mà tôi đã gặp trên đa luồng là "Java Concurrency in Practice". Nó tập trung rất nhiều vào sự tương tranh của luồng Java, và cả hai đều khiêm tốn và thú vị khi bạn bắt đầu hiểu các vấn đề và các khả năng được đưa ra bởi sự đồng thời. Bản sao tôi đã mua một vài năm trước đây đã có một số errata trong mã hóa, mặc dù, làm trầm trọng thêm một chủ đề đã được thử thách não: kiểm tra errata ở đây: http://jcip.net/errata.html.

Mặc dù được thiết kế cho các nhà phát triển Java muốn mạo hiểm vào đồng thời (theo cách này bao gồm bất kỳ ai từng sử dụng giao diện GUI dưới mọi hình thức), tôi chắc chắn những khó khăn kỹ thuật và sự tinh tế được nêu trong cuốn sách áp dụng cho bất kỳ việc triển khai nào đồng thời.

Bằng cách này, tôi cũng yêu Jython và có thể xác nhận rằng bất cứ điều gì đồng thời-khôn ngoan mà bạn có thể làm trong Java bạn rõ ràng có thể làm trong Jython. Tuy nhiên, có một cảnh báo: đồng thời có thể được lập trình không đồng bộ (bao gồm GUI) và/hoặc cho hiệu suất. Nếu cho sau này bạn có một vấn đề, theo ý kiến ​​của tôi: Jython trong kinh nghiệm của tôi chạy khoảng 10 x chậm hơn so với chương trình Java tương đương.

Điều này có nghĩa là các mô-đun Jython đòi hỏi của bạn sẽ phải gọi một thứ gì đó khác hơn là Jython cho các tác vụ số-crunching. Đồng thời, Jython cho đến nay * chưa có mô-đun đa xử lý của Python, vì vậy các liên lạc giữa các quá trình được thực hiện, trừ khi bạn mạo hiểm vào lãnh thổ sợ hãi của RMI. Bạn là một người đàn ông/đàn bà hơn tôi nếu bạn chọn lựa đó. Nhưng mọi thứ đều OK: hãy tham khảo "The Definitive Guide to Jython" tại http://www.jython.org ... chương 19 là một loại giới thiệu tiếng còi để đồng thời, và chương 10 là về tích hợp Java và Jython (gợi ý: nó vô lý dễ dàng).

  • thú vị: xem nhanh trang web Jython cho thấy, chỉ 10 ngày trước, 17/05/12, phiên bản 2.7a1 đã được phát hành ... bản phát hành "Alpha". Điều này sẽ chứa mô-đun đa xử lý, đi kèm với Python 2.6. Wd rất thú vị để kiểm tra điều này: nếu như vậy có lẽ sẽ cho bạn lựa chọn thú vị để liên kết các quy trình Jython và CPython (cập nhật sau: đáng buồn là nó xuất hiện cho thời điểm này không phải vậy - tên mô-đun "đa xử lý" không được nhận ra khi tôi thử) ...

PS một từ cuối cùng: hầu hết các chuyên gia biết nhiều hơn về những điều này hơn tôi nói rằng định luật Moore được thay thế trong nhập khẩu theo luật của Amdahl, nghĩa là thách thức khó khăn trong lập trình ổn định và các chương trình đồng thời thực sự có thể mở rộng sẽ không thể tránh khỏi trong tương lai. Chính xác như thế nào thật sự dễ dàng (tức là thread) đồng thời có thể được thực hiện với việc sử dụng các công cụ phân tích mã thông minh tôi không thể nói, nhưng đầu tư vào chủ đề này và hấp dẫn, trí tuệ mới của các lý do áp đặt bằng đồng thời sẽ có thể trả hết ... bạn thích một thử thách.

3

Có, với Jython bạn đã real multi-threading. Jython (JPython successor's) là một triển khai thực hiện Python chạy trong JVM. Một trong những khác biệt chính giữa Jython và dự án ban đầu là đầu tiên không có GIL và thực hiện một hỗ trợ đa luồng thực dựa trên việc thực hiện của JVM.

Tôi khuyên bạn nên xem qua số này bookOReilly's.

0

Khía cạnh khó hiểu ban đầu có thể là you can mix and match các cơ chế đồng thời của Java và Jython. Nhưng tất cả dường như hoạt động.Lý do là:

  • Bên dưới Jython là cùng một Java cũ. Tất cả các cơ chế luồng và cấu trúc dữ liệu mạnh mẽ của nó sẽ không bị phá vỡ ngay cả dưới máy móc Jython nặng.
  • Các chủ đề của Jython lấy các chủ đề Java làm khung của chúng và thêm một số cấu trúc thượng tầng để làm cho chúng nói được API luồng Python. (Không có cách nào tốt hơn để làm cho việc chuyển mã Python dễ dàng hơn). Nhưng bản chất của hai loại luồng là tương tự nhau. Ngoại trừ các chủ đề Jython

    ... không có ưu tiên, không có nhóm chủ đề và chủ đề không thể bị hủy, ngừng, tạm ngưng, tiếp tục hoặc gián đoạn. [1]

    thành ngữ

Các Python có lẽ thuận tiện hơn một chút, bởi vì, ví dụ, nếu bạn muốn làm như tương đương với synchronized (some_object) { ... }, có a small bit of fiddling required, mà có thể sẽ ít có thể đọc được vì sử dụng một RLock .