2009-04-16 24 views
15

Tôi không rõ lý do tại sao API thông dịch viên phụ tồn tại và tại sao nó được sử dụng trong các mô-đun như mô đun apache mod_wsgi. Nó chủ yếu được sử dụng để tạo một sandbox bảo mật cho các ứng dụng khác nhau đang chạy trong cùng một quá trình, hay nó là một cách để cho phép đồng thời với nhiều luồng? Có thể là cả hai? Có mục đích nào khác không?Mục đích của API thông dịch viên phụ trong CPython là gì?

Trả lời

14

Tôi tưởng tượng mục đích là tạo môi trường thực thi python riêng biệt. Ví dụ: mod_wsgi (mô-đun Apache Python) lưu trữ một trình thông dịch python đơn và sau đó lưu trữ nhiều ứng dụng trong các trình thông dịch phụ (trong cấu hình mặc định).

Một số điểm quan trọng từ documentation:

  • Đây là một (hầu như) môi trường hoàn toàn riêng biệt để thực hiện mã Python. Cụ thể, phiên dịch mới có các phiên bản riêng biệt, độc lập của tất cả các mô-đun đã nhập, bao gồm các mô-đun cơ bản __builtin__, __main__sys.
  • Bảng mô-đun nạp (sys.modules) và đường dẫn tìm kiếm mô-đun (sys.path) cũng tách biệt.
  • Bởi vì thông dịch viên phụ (và thông dịch viên chính) là một phần của quá trình tương tự, cách ly giữa chúng không hoàn hảo - ví dụ: sử dụng các tác vụ tệp cấp thấp như os.close().) ảnh hưởng đến các tệp đang mở của nhau.
  • Do cách tiện ích mở rộng được chia sẻ giữa các phiên dịch (phụ), một số tiện ích có thể không hoạt động bình thường; điều này đặc biệt có khả năng khi tiện ích mở rộng sử dụng các biến toàn cục (tĩnh) hoặc khi tiện ích xử lý từ điển của mô-đun sau khi khởi tạo.
+0

Điều này có nghĩa là các trình thông dịch khác nhau có thể chạy đồng thời trong các chuỗi khác nhau không? Tôi vẫn chưa rõ liệu có hay không các trình thông dịch khác nhau trong cùng một quá trình chia sẻ cùng một GIL. –

+3

GIL là một đối tượng toàn cầu cho quá trình này và được chia sẻ giữa các phiên dịch phụ. Vì vậy, không, họ không thể chạy đồng thời. http://objectmix.com/python/377035-multiple-independent-python-interpreters-c-c-program.html – codeape

+0

Cảm ơn bạn đã liên kết! Tôi đã cố gắng để tìm ra cho dù có bất kỳ cách nào xung quanh các hạn chế luồng của python và GIL, và tôi không đến với bất cứ điều gì. –

0

Như tôi đã hiểu nó cuối cùng, ý tưởng là có thể thực hiện nhiều ứng dụng cũng như nhiều bản sao của cùng một ứng dụng trong cùng một quá trình.

Đây là một tính năng được tìm thấy trong ngôn ngữ kịch bản khác (ví dụ như TCL), và sử dụng đặc biệt để xây dựng gui, máy chủ web, vv

Nó phá vỡ trong python vì nhiều phần mở rộng không an toàn nhiều thông dịch viên, do đó, một hành động của thông dịch viên có thể ảnh hưởng đến các biến trong một thông dịch viên khác.

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