17 điểm bởi xguru 2024-04-23 | Chưa có bình luận nào. | Chia sẻ qua WhatsApp
  • Trình biên dịch chuyển đổi chương trình Python sang WebAssembly
  • Loại bỏ overhead của trình thông dịch nên chạy nhanh hơn khoảng 3 lần so với CPython(WASM)
    • So với CPython(Native) thì đạt khoảng 60% tốc độ
  • Có nhiều cách để chạy Python nhanh trên WebAssembly
    • Sử dụng tập con của Python có thể được biên dịch thành mã có hiệu năng tốt: CPython, RPython(PyPy) và Codon
    • Sử dụng JIT bên trong Python: PyPy
    • Tối ưu hóa mã được tạo ra bằng phân tích tĩnh: mypy & mypy-c, Nuitka
  • Cuối cùng, ở đây họ quyết định sử dụng Nuitka, một trình biên dịch tối ưu hóa cho Python

Nuitka

  • Nuitka hoạt động bằng cách chuyển các lời gọi Python mà chương trình thực hiện sang C bằng cách dùng các lời gọi API CPython nội bộ
  • Hỗ trợ phần lớn các chương trình Python và chuyển mã Python thành các lời gọi CPython tương ứng
  • Cũng có thể hoạt động như một công cụ làm rối mã nguồn (không ai có thể decompile chương trình!)
  • Sau khi phân tích sâu mọi lựa chọn, họ nhận ra rằng cách nhanh nhất để chạy Python trên WebAssembly có lẽ là dùng Nuitka

Biên dịch Python sang WebAssembly bằng Nuitka

  • Vì phần lớn công việc chuyển mã Python thành các lời gọi tới trình thông dịch CPython bên dưới đã được Nuitka hoàn thành, nên đây có vẻ là lựa chọn dễ nhất để tăng tốc Python trong ngữ cảnh WebAssembly
  • Nuitka hiện chưa hoạt động với Python 3.12, nên họ phải biên dịch lại Python 3.11 cho WASI và sử dụng archive libpython.a được tạo ra
  • Khi thử chạy tệp Wasm đã tạo, họ gặp thêm một vấn đề khác nên đã gửi PR để upstream các thay đổi vào Nuitka
  • Hiện tại py2wasm đang dùng một fork của Nuitka, nhưng khi các thay đổi được tích hợp upstream, họ dự định biến py2wasm thành một lớp mỏng nằm trên Nuitka
  • Yêu cầu ban đầu của họ là tăng tốc tối đa việc thực thi Python để chuyển backend Python Django từ Google Cloud sang Wasmer Edge
  • py2wasm sẽ giúp tiến thêm một bước tới việc chạy các ứng dụng backend Python trên Edge với hiệu năng ấn tượng, từ đó có thể mang lại một lựa chọn rẻ hơn rất nhiều để host các ứng dụng này so với các nhà cung cấp đám mây hiện nay

Lộ trình sắp tới

  • Trong tương lai, họ muốn phát hành py2wasm dưới dạng một gói Wasmer để có thể chỉ cần chạy lệnh sau là sử dụng được
    wasmer run py2wasm --dir=. -- myfile.py -o myfile.wasm  
    

Chưa có bình luận nào.

Chưa có bình luận nào.