Đây là cổng Rust của stdlib graphlib của Python. Nó vượt qua tất cả các bài kiểm tra thư viện tiêu chuẩn và thay thế. Điều này cũng xảy ra với Python 3. 7 tương thích, vì vậy nó có thể được sử dụng làm backport. Vì cách sử dụng hoàn toàn giống với các thư viện tiêu chuẩn, vui lòng tham khảo tài liệu của họ để biết chi tiết về cách sử dụng
Xem dự án này trên GitHub
Thí dụ
from graphlib2 import TopologicalSorter graph = {0: [1], 1: [2]} # 0 depends on 1, 1 depends on 2 ts = TopologicalSorter[graph] ts.prepare[] while ts.is_active[]: ready_nodes = ts.get_ready[] ts.done[*ready_nodes] # all at a time or one by one
Động lực
Điều này chủ yếu được viết cho di và để tôi học Rust. Nói cách khác. vui lòng tự kiểm tra mã trước khi sử dụng mã này
Sự khác biệt với việc triển khai stdlib
- Đã thêm
TopologicalSorter.copy[]
sao chép biểu đồ đã chuẩn bị hoặc chưa chuẩn bị để có thể thực hiện nhiều lần - Cải thiện hiệu suất khá vững chắc [xem điểm chuẩn]
- Các cải tiến linh tinh, chẳng hạn như thuốc generic đang hoạt động mà không bị trì hoãn đánh giá [_______6_______ hoạt động trong thời gian chạy]
Hiệu suất
Việc triển khai được thiết kế cho trường hợp sử dụng cụ thể là thêm tất cả các nút, gọi prepare[]
sau đó sao chép và thực hiện trong một vòng lặp
from graphlib2 import TopologicalSorter graph = {0: [1], 1: [2]} ts = TopologicalSorter[graph] ts.prepare[] while True: # hot loop t = ts.copy[] while t.is_active[]: ready_nodes = t.get_ready[] t.done[*ready_nodes]
Điều này có nghĩa là trọng tâm là hiệu suất của TopologicalSorter.get_ready[]
và TopologicalSorter.done[]
, và chỉ có nỗ lực tối thiểu được đưa vào các phương pháp khác [_______7_______, add[]
và get_static_order[]
], mặc dù những phương pháp này vẫn khá hiệu quả
Đóng góp
- Sao chép repo
- Chạy
from graphlib2 import TopologicalSorter graph = {0: [1], 1: [2]} ts = TopologicalSorter[graph] ts.prepare[] while True: # hot loop t = ts.copy[] while t.is_active[]: ready_nodes = t.get_ready[] t.done[*ready_nodes]
0 - Chạy
from graphlib2 import TopologicalSorter graph = {0: [1], 1: [2]} ts = TopologicalSorter[graph] ts.prepare[] while True: # hot loop t = ts.copy[] while t.is_active[]: ready_nodes = t.get_ready[] t.done[*ready_nodes]
1 - Thực hiện các thay đổi của bạn
- Đẩy và mở yêu cầu kéo
- Đợi CI chạy
Nếu yêu cầu kéo của bạn được chấp thuận và hợp nhất, nó sẽ tự động được gửi lại cho PyPi [mọi cam kết với
from graphlib2 import TopologicalSorter graph = {0: [1], 1: [2]} ts = TopologicalSorter[graph] ts.prepare[] while True: # hot loop t = ts.copy[] while t.is_active[]: ready_nodes = t.get_ready[] t.done[*ready_nodes]2 đều được giải phóng]