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