我做了一些迷你的框架,以便能夠在的情況下捕捉連接錯誤,以防rabbitmq
關閉,以更優雅的方式處理錯誤,除非使用send_task
,否則它工作得很好。如何覆蓋send_task BaseTask類?
下面是一些代碼釐清思路:
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
而不是?