cassandradatastax Python驱动程序优雅的关闭逻辑使用芹菜

2024-04-24 14:39:23 发布

您现在位置:Python中文网/ 问答频道 /正文

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

芹菜试验.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函数,但没有。我错过了什么?在

输出

^{2}$

Tags: fromimportinfologsignalinitsessionlogging