2011-11-15 41 views
7

Tôi đang viết một ứng dụng web Django. Hiện tại, Django does not support Python 3. Vì mục đích của ứng dụng web của tôi, và không đi sâu vào nhiều chi tiết, về cơ bản tôi cần sử dụng một số thư viện chỉ hỗ trợ Python 3. Đủ để nói rằng sau khi nghiên cứu kỹ lưỡng, không có thay thế 2.x nào được tìm thấy.Phương pháp tốt nhất để gọi chương trình Python 3.x từ bên trong Python 2.x là gì?

Vì vậy, câu hỏi của tôi là: Làm thế nào tôi nên đi về điều này?

Tôi có cả Python 2 và 3 được cài đặt trên máy chủ của mình và tôi có mã Python 3 được viết và chờ để được gọi. Tôi đã xem xét chỉ đơn giản bằng cách sử dụng mô-đun subprocess, có hiệu quả gọi Python 3 từ dòng lệnh, nhưng câu hỏi là, đây có phải là phương pháp tốt nhất hoặc là có một thực hành tốt nhất tôi có thể sử dụng thay vào đây? Sử dụng subprocess có vẻ khá đáng sợ với tôi. Đừng làm cho tôi sai, tôi không sao với hackish, tôi chỉ muốn chắc chắn rằng không có gì khác tôi nên làm thay vào đó.

+0

Làm thế nào về việc sử dụng [cherrypy] (http://cherrypy.org/) và làm toàn bộ điều trong Python 3? –

+0

xmlrpc có thể là một lựa chọn đơn giản để xử lý con – gecco

+1

Bạn đã thử sử dụng chương trình 3to2 để xem các thư viện Python 3 không xác định có thể được chuyển đổi thành Python 2 tự động không? Bạn đã thử sử dụng Martin von Löwis '[port of Django to Python 3] (https://bitbucket.org/loewis/django-3k/) để mọi thứ đều chạy trong Python 3? –

Trả lời

6

Vì trình thông dịch Python 3 và Python 2 hoàn toàn riêng biệt và có thư viện riêng được cài đặt trên hệ thống của bạn, sử dụng subprocess để gọi một từ khác là thực hành tốt nhất. Nó không phải là một hack cả. Có một số cách để truyền dữ liệu giữa chúng nhưng hai trình thông dịch phải được chạy dưới dạng các tiến trình riêng biệt.

Điều đó nói rằng, bạn có thể cần ghi nhớ thời gian khởi động liên quan đến việc khởi chạy quá trình thông dịch viên. Điều đó quay trở lại cách truyền dữ liệu giữa hai quy trình. Nếu mã Python 2 của bạn sẽ thường xuyên gọi các thủ tục Python 3, bạn có thể cần cấu trúc chương trình Python 3 như một daemon. Nhưng bạn vẫn sẽ sử dụng subprocess để khởi chạy.

+0

Tuyệt vời. Cám ơn rất nhiều. Để xem liệu nó có cần phải kết thúc như một quá trình ... mà sẽ có một số suy nghĩ. Nó chỉ cần được gọi một lần khi người dùng đăng ký, vì vậy nó có thể không cần phải trong ngắn hạn, nhưng về mặt lý thuyết, nếu webapp của tôi trở nên hữu ích, nó có thể là một điều thuận tiện. Toàn bộ quá trình sẽ mất không quá 5 giây ngay cả khi kết nối Internet thực sự chậm. –

1

Chạy chương trình 3.x dưới dạng một dịch vụ riêng biệt và sau đó kết nối bằng một số loại cơ chế RPC?

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