Это практическое соглашение об осуществлении. Что вы представляете в качестве набора символов для базы 100? : -)
Использование цифр и всего алфавита достаточно распространено, поэтому функция base
с непрерывным набором приемлемых базовых значений реализовала эту функциональность. Основание 1 просто len (arg).
Существует также соглашение для кодирования base-64; без соглашения для значений 37-63, однако, функция base
оставила значение radix-64 для отдельного интерфейса.
Queue
объекты имеют это поведение, потому что они блокируют использование Condition
объекты формируются threading
модуль. Таким образом, Вашим решением является действительно единственный способ пойти.
Однако, если Вы действительно хотите a Queue
метод, который делает это, Вы можете monkeypatch Queue
класс. Например:
def interruptable_get(self):
while True:
try:
return self.get(timeout=1000)
except Queue.Empty:
pass
Queue.interruptable_get = interruptable_get
Это позволило бы Вам сказать
q.interruptable_get()
вместо
interruptable_get(q)
хотя monkeypatching обычно препятствует сообщество Python в случаях, таких как они, так как регулярная функция кажется столь же хорошей.
Это не может относиться к Вашему варианту использования вообще. Но я успешно использовал этот шаблон в нескольких случаях: (поверхностный и вероятный багги, но Вы понимаете).
STOP = object()
def consumer(q):
while True:
x = q.get()
if x is STOP:
return
consume(x)
def main()
q = Queue()
c=threading.Thread(target=consumer,args=[q])
try:
run_producer(q)
except KeybordInterrupt:
q.enqueue(STOP)
c.join()