3

私は、より適切な方法でエラーを処理するシャットダウンceleryの場合に接続エラーをキャッチできるように、ある種のミニフレームワークを作成しました。rabbitmqsend_task

アイデアを明確にするためのコードを次に示します。

class MyBaseTask(base_task.Task):
    """ Base Class to handle tasks from Me hohoho!"""
    abstract = True

    @classmethod
    def delay(cls, *args, **kwargs):
        """Hook to catch connection errors"""
        try:
            return super(MyBaseTask, cls).apply_async(args, kwargs)
        except socket.error as e:
            cls._safe_failover()  # a function to handle this error
            cls.get_logger().error(str(e))
        except Exception as e:
            cls.get_logger().error("Uknown Error: %s" % str(e))
            raise  # normal exception

今私はMyBaseTaskクラスをサブクラス化します:

class MyL33tTask(MyBaseTask):
    name = 'task.my_leet_task'

    def run(self, *args, **kwargs):
        # yada yada

また、ソケット エラーが発生した場合 (別名、ダウンした場合) に safe_failover 関数を実行しますrabbitmq。悲しいことに、ロードされていないsend_task('task.my_leet_task')ある種のプロキシを使用するため、使用するとこれは起こりません。MyBaseTask

代わりにオーバーライドsend_taskして使用する簡単な方法はありますか?MyBaseTask

4

1 に答える 1