Tối ưu thời gian import trong python

Xin chào mọi người!
Hiện tại em đang bị khó khăn ở import trong python, cụ thể như sau.
Chương trình đóng vai trò là một reverse proxy (giữa webserver và browser) nhận các requests từ client. Với mỗi requests sẽ gọi một file python (tất nhiên là file python đó sẽ gọi nhiều file python khác).
Như vậy với mỗi requests các thư viện trong python sẽ import một lần và nhiều file như vậy thì sẽ tốn nhiều thời gian cho quá trình import với số lần import tương ứng với số request
em đã tìm mà vẫn chưa ra. Có cách nào giải quyết vấn đề này không ạ?
Em cảm ơn ạ

Tham khảo multi threading xem, thay vì mỗi request gọi 1 file python thành mỗi request gọi tới file python tạo một threading làm nhiệm vụ mà bạn cần.

2 Likes

Cảm ơn Henry :))
mình cũng đã thử sử dụng thread và cả celery luôn. nhưng ít cái chạy độc lập, output1 là input2
cái mình cần là làm sao để giữ nó lại, chỉ cần import 1 lần cho nhiều lần á

Thời gian thực hiện import của Python rất nhanh và chắc chắn ko phải bottleneck trong project của b. Nếu b làm reverse proxy thì đa phần sẽ là network IO bound. Tuy vậy nếu b thực sự muốn optimize thì ko nên dùng Python bởi Python có GIL (xem thêm tại đây), chỉ có duy nhất 1 thread hoạt động đồng thời trong Python thôi. Mặc dù vậy b có thể thay thế khi viết lại toàn bộ project bằng asyncio để có thể giảm tác sự hạn chế của GIL.

3 Likes

e import numpy nên thời gian chiếm trung bình 0.2 giây, với một lượng requests cao thì thời gian import cũng đáng chú ý. Dù vậy bài viết về GIL của a rất hay, e cảm ơn ạ

M ko hiểu tại sao reverse proxy lại cần numpy làm gì nhỉ?

Nếu import toàn bộ thư viện numpy tốn thời gian thì b có thể thử chỉ import các function/class cần thiết thôi. Hoặc nếu hiểu sâu hơn thì có thể viết lại theo asynchronous pattern, để đoạn import ra ngoài hàm xử lý trong event-loop, khi đó numpy chỉ cần load lúc khởi tạo và được lưu lại trong RAM.

Tuy nhiên, Python ko phải là ngôn ngữ tối ưu cho networking vì bản chất blocking của nó. Nếu là dự án hẳn hoi thì m khuyên nên chuyển qua dùng ngôn ngữ lập trình khác.

1 Like

reverse proxy nhưng đc thiết kế là một machine learning nên có numpy a.

Bạn không thể giữ cho module Python đó sống và chỉ nhận event thôi à. Tại sao cứ phải bật tắt nó liên tục vậy? Nghe hệt như PHP ấy, mà bản thân hệ thống PHP nó cũng cache import.

6 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?