2008-09-10 25 views

Trả lời

15

Nếu bạn làm tìm thấy bạn cần phải viết mã duy nhất cho một môi trường, sử dụng con trăn

import mymodule_jython as mymodule 

import mymodule_cpython as mymodule 

có công cụ này trong một module đơn giản ('' module_importer ''?) Và viết mã của bạn như thế này :

from module_importer import mymodule 

Bằng cách này, tất cả những gì bạn cần làm là thay đổi module_importer.py trên mỗi nền tảng.

+1

Vì vậy, Daren, có cách nào để làm cho module_importer nhập biến đúng động dựa trên một số biến môi trường, v.v. – minty

+1

Xin lỗi, tôi vẽ một ô trống ở đây. Điều này sẽ là một câu hỏi SO xuất sắc mặc dù: "Làm thế nào để tự động tìm hiểu xem chúng tôi đang chạy Jython, CPython hoặc IronPython?". Sau đó, bạn chỉ có thể làm điều đó trong ifs ... –

+0

Mô-đun Python 'os' có thể được sử dụng làm ví dụ. Nó cung cấp các thói quen hệ điều hành, ví dụ: 'os.unlink',' os.rename', v.v. tùy thuộc vào hệ thống bạn đang sử dụng. – jfs

10

@ Daren Thomas: Tôi đồng ý, nhưng bạn nên sử dụng số platform module để xác định trình thông dịch nào bạn đang chạy.

+1

Theo như tôi biết 'nền tảng' không có sẵn trong IronPython (2.0.1). 'os' cũng vậy. – Cyberdrow

2

Tôi viết mã cho CPython và IronPython nhưng mẹo cũng nên hoạt động với Jython.

Về cơ bản, tôi viết tất cả mã nền tảng cụ thể trong các mô-đun/gói riêng biệt và sau đó nhập mã phù hợp dựa trên nền tảng tôi đang chạy. (xem bình luận của cdleary ở trên)

Điều này đặc biệt quan trọng khi nói đến sự khác biệt giữa việc triển khai SQLite và nếu bạn đang triển khai bất kỳ mã GUI nào.

1

Điều # 1 IMO: Tập trung vào an toàn chủ đề. CPython's GIL làm cho việc viết các luồng an toàn dễ dàng bởi vì chỉ có một luồng có thể truy cập trình thông dịch tại một thời điểm. IronPython và Jython là một chút ít cầm tay mặc dù.

0

Có hai vấn đề lớn ở đây chơi ...

Thứ nhất, để kiến ​​thức của tôi, chỉ CPython đã RAII - bạn phải đóng tài nguyên của riêng bạn trong Jython, Ironpython, v.v.

Và thứ hai, như đã được đề cập, là an toàn luồng.

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