ich die folgenden Threads haben, denn wo die Warteschlange q ist leer die meiste Zeit:Python mit queue.get Blockierung() ohne Ausnahmen oder besetzt warten
def run(self):
while True:
if not self.exit_flag:
items = self.q.get()
q.work_it()
else:
return 0
Wenn der Ausfahrt-Flag gesetzt ist, dann ist es nicht wahrscheinlich sofort beenden, da es zur Zeit bei
items = self.q.get()
blockiert wahrscheinlich ist, wenn ich auf sie ein Timeout setzen
items = self.q.get(True, 0.1)
Ich werde oft die Empty-Exception auslösen, da die Queue häufiger leer ist als nicht und mehr Ressourcen als ich möchte verwenden.
Wenn ich damit beschäftigt Warte tun wie
def run(self):
while True:
if not self.exit_flag:
if not self.q.empty():
items = self.q.get()
q.work_it()
time.sleep(0.1)
else:
return 0
Dann beschäftigt ich warten, anstatt die Sperrmerkmal Queue.get(), die hässlich scheint. Es scheint, als würde ich hier die elegante Lösung dieses Problems vermissen? Gibt es einen oder sollte ich einfach die busy warting Lösung nutzen?
Ja, das klingt nach der besten Lösung. Danke vielmals. – user2247969