Tôi đang sử dụng Threading.Event khá chuẩn: chủ đề chính được đến một điểm mà nó trong một vòng lặp chạy:giải pháp tốt hơn cho Python Threading.Event bán bận rộn chờ đợi
event.wait(60)
Các khối khác trên một yêu cầu cho đến khi trả lời có sẵn và sau đó khởi tạo một:
event.set()
tôi mong chờ các chủ đề chính để lựa chọn trong 40 giây, nhưng đây không phải là trường hợp. Từ nguồn Python 2.7 Lib/threading.py:
# Balancing act: We can't afford a pure busy loop, so we
# have to sleep; but if we sleep the whole timeout time,
# we'll be unresponsive. The scheme here sleeps very
# little at first, longer as time goes on, but never longer
# than 20 times per second (or the timeout time remaining).
endtime = _time() + timeout
delay = 0.0005 # 500 us -> initial delay of 1 ms
while True:
gotit = waiter.acquire(0)
if gotit:
break
remaining = endtime - _time()
if remaining <= 0:
break
delay = min(delay * 2, remaining, .05)
_sleep(delay)
Những gì chúng ta nhận được là một chọn syscall chạy mỗi 500us. Điều này gây ra tải đáng chú ý trên máy với một vòng lặp chọn khá chặt chẽ.
Ai đó có thể vui lòng giải thích lý do tại sao có một hành động cân bằng có liên quan và tại sao nó khác với một chuỗi đang chờ trên bộ mô tả tệp.
và thứ hai, Có cách nào tốt hơn để thực hiện chủ đề chính chủ yếu là ngủ mà không có vòng lặp chặt chẽ như vậy không?