mirror of https://github.com/peter4431/rq.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
30 lines
1.0 KiB
Python
30 lines
1.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
from __future__ import (absolute_import, division, print_function,
|
|
unicode_literals)
|
|
|
|
|
|
import logging
|
|
from rq import get_current_connection
|
|
from rq import Worker
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def cleanup_ghosts(conn=None):
|
|
"""
|
|
RQ versions < 0.3.6 suffered from a race condition where workers, when
|
|
abruptly terminated, did not have a chance to clean up their worker
|
|
registration, leading to reports of ghosted workers in `rqinfo`. Since
|
|
0.3.6, new worker registrations automatically expire, and the worker will
|
|
make sure to refresh the registrations as long as it's alive.
|
|
|
|
This function will clean up any of such legacy ghosted workers.
|
|
"""
|
|
conn = conn if conn else get_current_connection()
|
|
for worker in Worker.all(connection=conn):
|
|
if conn._ttl(worker.key) == -1:
|
|
ttl = worker.default_worker_ttl
|
|
conn.expire(worker.key, ttl)
|
|
logger.info('Marked ghosted worker {0} to expire in {1} seconds.'.format(worker.name, ttl))
|