354:23e5b4d4f272 default tip
Anton Shestakov <av6@dwimlabs.net>, Mon, 13 Apr 2020 19:01:24 +0800
tests: update a link

previous change 153:c50882dabe4f

candolint/queue.py

Permissions: -rw-r--r--

Other formats: Feeds:
from __future__ import absolute_import
import logging
def loop(rconn, keys, handler):
failures = {}
while True:
key, value = rconn.blpop(keys)
try:
handler(rconn, value)
except KeyboardInterrupt:
raise
except Exception as e:
logging.error('%r (while handling %r)', e, value)
fkey = hash(value)
failures.setdefault(fkey, 0)
failures[fkey] += 1
if failures[fkey] > 3:
logging.error('Dropping this value (too many errors)')
failures.pop(fkey)
else:
logging.info('Saving this value for later')
rconn.rpush(key, value)