Giao tiếp giữa Python và Java

Em chào mọi người!
Hiện em đang làm 1 project, hiểu đơn giản là em muốn lấy input từ java rồi truyền cho Python tính toán kết quả đưa ra output lại cho Java. Mọi người có thể cho em xin các ý kiến về các kiến thức nên học, tìm hiểu không ạ?
Em cảm ơn.

Có một vài cách để làm việc này. Nếu cả hai chương trình Python và Java đều chạy trên cùng một máy thì không nhất thiết phải sử dụng socket. Bạn có thể sử dụng tham số dòng lệnh và các file để trao đổi dữ liệu (ví dụ như viết input từ Java vào file rồi để Python đọc file và viết output vào một file khác, hoặc có thể gọi trực tiếp Python từ Java như ví dụ này: https://norwied.wordpress.com/2012/07/23/pass-arguments-from-java-to-python-app/).

Trong các trường hợp mà bạn cần truyền dữ liệu qua network thì bạn mới cần sử dụng đến socket với định dạng theo ý bạn (JSON chỉ là một trong số nhiều định dạng dữ liệu mà thôi, trong các ứng dụng truyền thống cho các công ty lớn, dữ liệu thường được trao đổi theo định dạng XML)

Tuy nhiên, tôi hơi ngạc nhiên khi bạn muốn sử dụng Java làm wrapper và sử dụng Python để tính toán vì thông thường thì Java có performance tốt hơn là Python. Thành ra ít có ai làm như vậy. Bạn định làm chương trình này để làm gì?

6 Likes

Nếu vậy viết rest trên java đi. Xong python gọi nó để thực thi là xong rồi. Đơn giản dễ chơi dễ trúng thưởng

Hoặc 1 cách nữa mình đang xài là dùng chung database :joy:

3 Likes

Dạ, em định làm 1 cái app nho nhỏ bằng Android mà ở đó em lấy input đầu vào là ảnh, sau đó em gửi cho phía Python xử lí ảnh các thứ, sau đó sẽ trả lại output lại cho App.
Có nhiều cách xử lí mà em không biết nên dùng công nghệ nào sao cho tối ưu, tiện lợi nhất ạ.

Vậy là Android tương tác với OpenCV chứ nhỉ. Cặp này có trên trang opencv luôn.

3 Likes

ah, nếu vậy thì chỉ xài Rest API thôi, chứ android a chưa thấy ai chạy python (chắc có nhưng do ngu nên chưa biết)
hoặc làm như bạn @rogp10 đó, opencv android có hỗ trợ mà

2 Likes

Có thể chạy được nhưng không nên làm vậy. Chả có lợi ích gì

3 Likes

Điều này hoàn toàn phụ thuộc vào mục đích của ứng dụng bạn định viết. Nếu như theo bạn nói là để xử lý ánh thì có nhiều thư viện để xử lý ảnh hỗ trợ các ngôn ngữ lập trình khác nhau, nhưng nếu bạn đã chọn viết cho Android thì bạn nên chọn thư viện nào có hỗ trợ Java để không phải viết bằng hai ngôn ngữ khác nhau (như OpenCV như hai bạn @rogp10@ltutrung đã đề nghị). Tôi thấy có OpenCV4Android SDK tại đây:

https://docs.opencv.org/2.4/doc/tutorials/introduction/android_binary_package/O4A_SDK.html

Bạn đọc thử tài liệu tài liệu trên xem có phù hợp với yêu cầu của bạn không?

Nguyên tắc tổng quát khi lập trình là ứng dụng là chọn các thư viện và công cụ phù hợp nhất với mục đích của ứng dụng và kỹ năng lập trình của bạn (hoặc nhóm của bạn) để làm việc có hiệu quả nhất.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?