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

Posted

技术标签:

【中文标题】Python - 欺骗库中的单个方法 - 处理死队列 - Djangoq/qcluster/SQS【英文标题】:Python - Spoofing a single method in a library - Handling Dead Queue- Djangoq/qcluster/SQS 【发布时间】:2018-11-10 12:45:07 【问题描述】:

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

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

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

但真的不知道如何注入新方法,甚至不知道是否可能。

【问题讨论】:

【参考方案1】:

我还没有阅读完整的代码,但你可能(或不......)能够通过猴子补丁 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`

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

【讨论】:

以上是关于Python - 欺骗库中的单个方法 - 处理死队列 - Djangoq/qcluster/SQS的主要内容,如果未能解决你的问题,请参考以下文章

蓝桥杯G将军

新上映《敢死队》电影谁有下载种子

Python学习笔记

Python——函数

单个静态对象库中的多个重复符号

《敢死队2》观后感