Trăn có được sử dụng trong tên lửa không?

Rocket® Universe®, một thành phần của nền tảng ứng dụng MultiValue, là một máy chủ dữ liệu linh hoạt, nhanh chóng để phát triển các ứng dụng doanh nghiệp. UniVerse hỗ trợ hàng nghìn hoạt động kinh doanh quan trọng trong các ngành như tài chính, y tế, sản xuất, phân phối, bán lẻ và giáo dục đại học

Có một câu hỏi về Rocket Universe?

Hỏi một chuyên gia

Có hai phương pháp gọi Rocket. Đầu tiên là phương thức gốc thể hiện toàn bộ khả năng của Rocket cho nhà phát triển

from rocket import Rocket
from wsgiref.simple_server import demo_app

server = Rocket[['127.0.0.1', 80], 'wsgi', {"wsgi_app":demo_app}]
server.start[]

Thứ hai là một bộ điều hợp CherryPy đơn giản để làm cho Rocket hoạt động như một sự thay thế thả xuống cho máy chủ CherryPy WSGI

from rocket import CherryPyWSGIServer
from wsgiref.simple_server import demo_app

server = CherryPyWSGIServer[['127.0.0.1', 80], demo_app]
server.start[]

Xem Tham chiếu API bên dưới để biết thêm chi tiết về tất cả các tùy chọn có sẵn. Ngoài ra, bản phân phối nguồn chứa một thư mục ví dụ với ví dụ sẵn sàng chạy của từng loại phương thức

Gỡ lỗi¶

Rocket sử dụng tối ưu hóa tích hợp sẵn của Python. Bật tối ưu hóa sẽ bỏ qua việc đánh giá các thông báo gỡ lỗi và tăng tốc mọi thứ lên một chút. Điều này không tự động xảy ra, bạn sẽ cần bật nó một cách cụ thể bằng biến môi trường hoặc tùy chọn dòng lệnh

Ghi nhật ký¶

Rocket sử dụng mô-đun ghi nhật ký Python tiêu chuẩn để ghi nhật ký. Nó cung cấp ba lớp nhật ký

  1. “Tên lửa. Yêu cầu” - Yêu cầu HTTP được ghi lại ở đây ở cấp INFO
  2. “Tên lửa. Errors” - Lỗi được ghi ở đây ở cấp độ thích hợp
  3. “Tên lửa” - Lớp nhật ký này sẽ bao gồm tất cả các thông điệp tường trình

Để ghi tin nhắn vào một tệp, hãy làm như thế này trước khi chạy Rocket[]. bắt đầu[]

import logging
import logging.handlers
log = logging.getLogger['Rocket']
log.setLevel[logging.INFO]
log.addHandler[logging.handlers.FileHandler['rocket.log']]

Tham chiếu API¶

Các lớp học¶

Tên lửa [giao diện, phương thức, app_info, min_threads, max_threads, queue_size, thời gian chờ]

  • interfaces - Either a tuple or list of tuples that specify the listening socket information. Mỗi bộ chứa một địa chỉ IP dựa trên chuỗi, số cổng số nguyên và, tùy chọn, đường dẫn tệp chính và đường dẫn tệp chứng chỉ. Ví dụ

    ['127.0.0.1', 80]
    

sẽ chỉ phục vụ cho localhost trên cổng 80. Để phục vụ trên tất cả các giao diện, hãy chỉ định địa chỉ IP là 0. 0. 0. 0 cùng với số cổng mong muốn. các giao diện cũng có thể là một danh sách các bộ dữ liệu như vậy chỉ định tất cả các giao diện mà máy chủ Rocket sẽ phản hồi các yêu cầu. Ví dụ

[['0.0.0.0', 80],
 ['0.0.0.0', 443, 'server_key.pem', 'server_cert.pem']]

sẽ cung cấp HTTP trên cổng 80 cho khách hàng từ bất kỳ địa chỉ nào và HTTPS trên cổng 443 cho khách hàng từ bất kỳ địa chỉ nào. Lưu ý rằng nếu bạn đang sử dụng Rocket trên phiên bản Python nhỏ hơn 2. 6, bạn sẽ phải cài đặt mô-đun ssl theo cách thủ công vì tính năng HTTPS phụ thuộc vào nó

Nếu bạn không có chứng chỉ và khóa máy chủ và chỉ cần chứng chỉ tự ký, bạn có thể tạo chứng chỉ bằng OpenSSL. Tài liệu Python có thêm chi tiết về cách thực hiện việc này

GHI CHÚ. Bộ điều hợp CherryPyWSGIServer không hỗ trợ SSL theo cách thông thường mà máy chủ của CherryPy hỗ trợ. Thay vào đó, hãy chuyển một danh sách hoặc bộ giống như giao diện cho CherryPyWSGIServer và nó sẽ được xử lý như Rocket thực hiện

CŨNG LƯU Ý. Có một cặp chứng chỉ khóa trong thư mục kiểm tra [trong bản phân phối nguồn]. Hãy sử dụng chúng để thử nghiệm. KHÔNG SỬ DỤNG CÁC CHỨNG CHỈ BAO GỒM CHO TRANG WEB SẢN XUẤT. Bạn đã được cảnh báo

  • phương thức - Một giá trị chuỗi cho biết loại Công nhân sẽ sử dụng để trả lời các yêu cầu mà Rocket nhận được. Mặc định là wsgi và sẽ gọi lớp WSGIWorker để xử lý các yêu cầu. Chuyển đến phần Phương pháp để xem tất cả các phương pháp có sẵn
  • app_info - Từ điển chứa thông tin mà lớp Worker được chỉ định trong phương thức sẽ sử dụng để cấu hình. Xem tài liệu trong phần Phương thức cho lớp Công nhân bạn đang sử dụng để biết chi tiết về những gì cần đưa vào từ điển này
  • min_threads - Một số nguyên chuỗi Worker tối thiểu để chạy. Con số này phải lớn hơn 0. Rocket sẽ luôn có ít nhất min_threads số lượng luồng chạy cùng một lúc trừ khi nó đang trong quá trình ngừng hoạt động
  • max_threads - Một số nguyên của Worker thread tối đa. Số này phải lớn hơn min_threads hoặc 0. Max_threads bằng 0 [không] cho biết không có số lượng luồng tối đa. Rocket sẽ tiếp tục tạo chủ đề miễn là có các kết nối chưa được trả lời trong hàng đợi yêu cầu. Nếu môi trường đang chạy bị giới hạn bởi số lượng luồng mà một quy trình có thể sở hữu, hãy cân nhắc rằng ngoài max_threads, sẽ còn có một luồng giám sát và luồng nghe đang chạy
  • queue_size - Một số lượng kết nối được phép xếp hàng đợi trước khi Rocket chấp nhận chúng. Số này được chuyển đến hàm listen[] trong thư viện ổ cắm của hệ điều hành. Nó mặc định là Không sử dụng tối đa của hệ điều hành hoặc 5 nếu không thể khám phá tối đa hệ điều hành
  • thời gian chờ - Một số nguyên giây để nghe kết nối cho một yêu cầu mới trước khi đóng nó. Mặc định là 600
  • handle_signals - Một boolean cho biết Rocket có phản hồi với tín hiệu quy trình kiểu UNIX hay không [nếu nền tảng hỗ trợ tín hiệu]. Mặc định là True

CherryPyWSGIServer[giao diện, wsgi_app, numthreads, server_name, max, request_queue_size, timeout, shutdown_timeout]

  • giao diện - tương đương với một bộ giao diện ở trên
  • wsgi_app - ứng dụng WSGI để Rocket phục vụ
  • numthreads - tương đương với min_threads ở trên
  • server_name - Không được sử dụng - Rocket sử dụng tên máy chủ của chính nó
  • max - tương đương với max_threads ở trên
  • request_queue_size - tương đương với queue_size ở trên
  • thời gian chờ - tương đương với thời gian chờ ở trên nhưng mặc định là 10
  • shutdown_timeout - Không được sử dụng - Cơ chế tắt máy của Rocket hoạt động khác và không yêu cầu thời gian chờ

Phiên bản¶

Một phiên bản của Rocket [hoặc CherryPyWSGIServer] hai phương thức để sử dụng bên ngoài

  • start[background=False] - Bắt đầu vòng lặp máy chủ chính. Nếu background=False, cuộc gọi này sẽ bị chặn cho đến khi quá trình thực thi của máy chủ bị gián đoạn bởi
    • KeyboardInterrupt cho một máy chủ đang chạy trong bảng điều khiển
    • Quá trình nhận tín hiệu SIGTERM hoặc SIGHUP cho các nền tảng hỗ trợ tín hiệu và handle_signals là True
    • Một luồng đang chạy báo hiệu máy chủ dừng lại
    • Một luồng bên ngoài gọi phương thức dừng
  • stop[stoplogging=False] - Phương thức này sẽ
    • hết thời gian chờ và đóng tất cả các kết nối đang hoạt động
    • dừng tất cả công nhân và theo dõi chủ đề
    • thông số dừng ghi nhật ký KHÔNG ĐƯỢC DÙNG và mặc định là Sai. Vượt qua True, sẽ gọi ghi nhật ký. shutdown[] và tăng DeprecationWarning khi bật chế độ gỡ lỗi. nhật ký cuộc gọi. shutdown[] là trách nhiệm của nhà phát triển ứng dụng

Cân nhắc kiến ​​trúc¶

Câu chuyện ngắn¶

Đối với Jython chạy các ứng dụng liên kết với CPU, hãy sử dụng 1. Gấp 5 lần số lõi CPU cho cả min_threads và max_threads

Đối với cPython, hãy sử dụng số lượng min_threads hợp lý [10 đối với máy chủ nhỏ hoặc máy chủ phát triển, 64 đối với máy chủ sản xuất] mà không có giới hạn nào được đặt thành max_threads

Giải trình¶

Rocket được thử nghiệm để chạy với cả cPython và Jython. Đó là những nền tảng rất khác nhau từ góc độ đồng thời. Điều này có tác động đến cách cấu hình Rocket trên mỗi nền tảng

Do GIL của nó, cPython giữ một tiến trình trên một CPU bất kể số lượng luồng đang chạy. Các luồng được sử dụng trong cPython để cho phép công việc khác tiếp tục trong khi một số phần bị chặn đối với các hoạt động bên ngoài, chẳng hạn như truy vấn cơ sở dữ liệu hoặc đọc tệp. Vì lý do này, thuận lợi là có một số lượng lớn các luồng đang chạy

Mặt khác, Jython không có GIL và hoàn toàn đa luồng với khóa chi tiết. Nhược điểm của điều này là nhiều luồng sẽ ngồi và khóa tài nguyên toàn cầu. Đói là một vấn đề lớn đối với các máy chủ bị ràng buộc bởi CPU với số lượng luồng cao. Nếu ứng dụng web của bạn phần lớn bị ràng buộc I/O, thì một số lượng lớn luồng là hoàn toàn ổn. Nhưng đối với các ứng dụng liên quan đến CPU, việc có số lượng luồng lớn sẽ làm giảm đáng kể hiệu suất của Rocket trên Jython. Số được đề xuất cho max_threads cho Rocket trên các ứng dụng giới hạn CPU là 1. 5 * số lượng lõi CPU. Ví dụ: máy chủ có 2 bộ xử lý lõi kép có 4 lõi. Số luồng tối đa được đề xuất cho Jython sẽ là 6 đối với các ứng dụng liên kết với CPU. Vì đây là một con số quá thấp so với các đề xuất của cPython, nên việc đặt max_threads và min_threads thành một số bằng nhau sẽ ngăn nhóm luồng tự động linh hoạt nhóm luồng [do đó tiết kiệm thêm một chút năng lượng của bộ xử lý]

Python có được sử dụng trong khoa học tên lửa không?

Sự phát triển chóng mặt được thúc đẩy bởi việc sử dụng rộng rãi Python trong học máy, chuỗi khối, thực tế ảo, mạng lưới thần kinh, trí tuệ nhân tạo và giao dịch theo thuật toán. Python Rocket Science là cánh cổng giúp bạn viết các ứng dụng phức tạp trong những lĩnh vực này .

NASA có sử dụng Python không?

Đây là cách nó hoạt động. Dữ liệu từ Mạng không gian sâu của NASA cung cấp cho các hệ thống xử lý của Viện Khoa học Kính viễn vọng Không gian bằng Python . “Và đó là nơi mã của tôi xuất hiện,” Mike Swam, trưởng nhóm xử lý dữ liệu từng làm việc trên JWST, cho biết trong một tập của podcast Nói chuyện với Python vào tháng 3 năm 2022.

Lập trình nào được sử dụng cho tên lửa?

Python là ngôn ngữ lập trình phổ biến nhất nhờ các thư viện tích hợp sẵn và thân thiện với người mới bắt đầu. Python được SpaceX sử dụng để viết mã, xây dựng tàu vũ trụ và sau đó phóng nó lên quỹ đạo.

Python có được sử dụng trong ngành vũ trụ không?

Tôi là một người hâm mộ cuồng nhiệt, nhưng những gì xảy ra trong không gian gần đây cũng thú vị như những cuộc phiêu lưu của phi hành đoàn Starship Enterprise. Ngoài ra, Python, là một trong những ngôn ngữ lập trình được NASA sử dụng, đã đóng một vai trò quan trọng trong việc này .

Chủ Đề