def create_event_fires(event_id): # get a lock r = get_redis_connection() key = "event_fires_event_%d" % event_id with r.lock(key, timeout=300): try: with transaction.atomic(): event = CampaignEvent.objects.filter(pk=event_id).first() if event: EventFire.do_create_eventfires_for_event(event) except Exception as e: # pragma: no cover # requeue our task to try again in five minutes create_event_fires(event_id).delay(countdown=60 * 5) # bubble up the exception so sentry sees it raise e