Python - 欺骗库中的单个方法 - 处理死队列 - Djangoq/qcluster/SQS



我在我的项目中使用 djangoq,并使用 sqs 作为代理。 作为系统的一部分,我将一些由 qcluster 执行并执行的任务排队。当某些任务失败时,它们最终会进入 SQS 中的 DEAD 队列。

现在,如果我在该队列中放置一个 qcluster,则会尝试再次执行该任务。但我想要的是接受任务,检查参数,获取对象模型的PK,然后将其标记为失败。 我发现我需要做的是,创建一个新的worker函数。 并替换默认的。 https://github.com/Koed00/django-q/blob/master/django_q/cluster.py#L341

问题是默认的直接从文件中的范围调用,而不是作为参数传递给其他方法。 所以我需要做的是创建一个抽象层,它将从 djangoq 包导入,同时将新的 worker 方法注入包中。 然后我会从那个抽象层运行 qcluster。

但真的不知道如何注入新方法,即使可能与否。

我还没有阅读整个代码,但你可能(或没有......(能够通过猴子修补cluster.worker来使事情工作:

from django_q import cluster
# in case you need to call the original implementation
original_worker = cluster.worker
def myworker(...):
# your code here
cluster.worker = myworker
# now cluster will use `myworker`

但这充其量只能被视为一种临时解决方法。正确的解决方案是分叉 djangoq,这样它只使用自己的worker函数作为默认值,并让你传递任何其他可调用的函数。

最新更新