Cassandra DataStax Python驱动程序使用芹菜优雅关闭逻辑

Cassandra DataStax Python驱动程序使用芹菜优雅关闭逻辑,python,cassandra,celery,Python,Cassandra,Celery,我对芹菜的信号处理有问题。我需要能够触发一些关闭逻辑,以便优雅地从Cassandra集群/会话断开连接(使用DataStax Python驱动程序)。我尝试了两种不同的方法来实现SIGTERM和SIGINT处理(参见下面的代码),将teardown函数分配给信号。我使用的是Ubuntu 16.04 LTS celerytest.py import logging import signal from celery import Celery from celery import platform

我对芹菜的信号处理有问题。我需要能够触发一些关闭逻辑,以便优雅地从Cassandra集群/会话断开连接(使用DataStax Python驱动程序)。我尝试了两种不同的方法来实现SIGTERM和SIGINT处理(参见下面的代码),将teardown函数分配给信号。我使用的是Ubuntu 16.04 LTS

celerytest.py

import logging
import signal
from celery import Celery
from celery import platforms
from celery.signals import beat_init
from celery.signals import worker_process_init
from cassandra.cluster import Cluster

cluster = None
session = None
log = logging.getLogger()
log.setLevel('INFO')
handler = logging.StreamHandler()
handler.setFormatter(logging.Formatter("%(asctime)s [%(levelname)s] %(name)s: %(message)s"))
log.addHandler(handler)

def cassandra_init(**kwargs):
    global cluster, session
    """ Initialize a clean Cassandra connection. """
    if cluster is not None:
        log.info("Shutting down Cassandra cluster connection")
        cluster.shutdown()
    if session is not None:
        log.info("Shutting down Cassandra session connection")
        session.shutdown()    
    log.info("Initializing Cassandra connection")
    cluster = Cluster(['127.0.0.1'])
    session = cluster.connect('test')

def cassandra_teardown(signum, frame):
    log.info("Shutting down Cassandra session connection")
    session.shutdown()
    log.info("Shutting down Cassandra cluster connection")
    cluster.shutdown()

def install_pool_process_sighandler(**kwargs):
    log.info("Installing sighandlers")
    platforms.signals["TERM"] = cassandra_teardown # DOES NOT WORK
    platforms.signals["INT"] = cassandra_teardown # DOES NOT WORK        
    #signal.signal(signal.SIGINT, cassandra_teardown) # DOES NOT WORK EITHER
    #signal.signal(signal.SIGTERM, cassandra_teardown) # DOES NOT WORK EITHER


# Initialize worker context for both standard and periodic tasks.
worker_process_init.connect(cassandra_init)
worker_process_init.connect(install_pool_process_sighandler)
beat_init.connect(cassandra_init)
beat_init.connect(install_pool_process_sighandler)

app = Celery('celerytest', broker_url = 'amqp://guest:guest@localhost:5672//')
按ctrl-c应该触发cassandra_teardown函数,但不会。我错过了什么

输出

^C
worker: Hitting Ctrl+C again will terminate all running tasks!
worker: Warm shutdown (MainProcess)