Batch acquire: take up to N tasks per call across non-empty queues
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 30/100
- Loại issue
- Tính năng
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- python, redis
- Lĩnh vực
- backend, distributed-systems
Hướng nghiên cứu
Trước tiên, hãy đọc threadmill/backends/redis.py và acquire.lua, sau đó theo dõi WorkerProcess và WorkerThread để hiểu luồng acquire hiện tại theo từng thread. Xác định cách fetch-and-dispatch xử lý thời điểm của lease, việc tắt máy một cách graceful và các task được tải trước, đồng thời giữ pop và move trong một lần gọi script. Hoàn thành khi có thể acquire tối đa N task trên các queue không rỗng mà không có công việc nào bị bỏ lại hoặc thất bại sớm.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Split out of #48 during the fair multi-queue scheduling change (codingjoe-fair-multi-queue-scheduling).
defer: Batch acquire (fetch up to N tasks per call across non-empty queues). Needs executor fetch-and-dispatch; the lease would tick while tasks wait in-process. [threadmill/backends/redis.py]
Why
acquire() pops a single task per script call, so a process with --threads 4 performs four Redis round trips to fill its threads. A batch acquire that spreads up to N tasks across the non-empty queues would cut round trips and drain several queues in parallel.
What makes it non-trivial
WorkerProcessruns oneWorkerThreadper thread, each callingacquire()itself. A batch would need a fetch-and-dispatch step, since a single thread cannot execute N tasks at once.acquire.luamoves the task into the running set withdeadline = now + lease_ttl. Tasks prefetched into an in-process queue would burn lease budget while waiting, so the reaper could fail them, or the lease clock has to start at execution instead.- Graceful shutdown must return prefetched, unstarted tasks to the ready set instead of leaving them to be reaped as FAILED.
Pop and move must stay inside one script call.
- Ngôn ngữ chính
- Python
- Star
- 17
- Fork
- 1
- Merge trung bình
- 2 giờ 47 phút
- Pull request đã merge (30 ngày)
- 13
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của codingjoe/threadmill
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
codingjoe/threadmill#79 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
codingjoe/threadmill#81 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 92/100
codingjoe/threadmill#72 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 Nửa ngày Mức phù hợp với người mới 84/100
codingjoe/threadmill#52 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
WorkerProcess passes None poll intervals to the backend, breaking acquire in the consumer threadĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
codingjoe/threadmill#53 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của codingjoe/threadmill
Issue tương tự
-
Improve Task Cache Windows Registry events to carry the task subkey's last written time and key pathĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
log2timeline/plaso#5299 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 2 ngày
-
deployment release-lag
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
nolte/kamerplanter#2047 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
ClanGenOfficial/clangen#6216 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
API bug connectors
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 92/100
pyinfra-dev/pyinfra#1986 ·
Maintainer thường phản hồi trong vòng 3 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
521xueweihan/HelloGitHub#3847 ·