【发布时间】:2016-07-26 11:18:07
【问题描述】:
我正在尝试在队列中运行多个任务。任务来自用户输入。我尝试的是创建一个具有 ThreadPoolExecutor 属性的单例类并向其中添加任务。任务添加得很好,但看起来只有第一个添加的任务集有效。以下是添加但未执行的。
class WebsiteTagScrapper:
class __WebsiteTagScrapper:
def __init__(self):
self.executor = ThreadPoolExecutor(max_workers=5)
instance = None
def __new__(cls): # __new__ always a classmethod
if not WebsiteTagScrapper.instance:
WebsiteTagScrapper.instance = WebsiteTagScrapper.__WebsiteTagScrapper()
return WebsiteTagScrapper.instance
【问题讨论】:
-
你可以发布一个 MCVE (stackoverflow.com/help/mcve) 吗?或者至少这个东西是如何在你的代码中实际使用的?
-
另外,请注意,Django 经常使用多处理服务,甚至有时在负载均衡器后面的多台服务器上提供服务,因此您的“单例”仅对于给定进程的“单例”给定的服务器。它显然不会在进程和服务器之间共享......
-
@brunodesthuilliers 哇,很高兴知道。我在我的 api 中调用这个类并将来自 POST 的输入 url 作为参数传递
-
@brunodesthuilliers 我看到有人建议使用 celery,但我认为这太过分了
-
celery 对您的用例来说可能会或不会过分杀伤力 - 无法判断 - 但它是最常被建议的解决方案是有原因的:正确处理分布式异步任务队列并非易事。但是您可以考虑一些更简单/更轻量级的解决方案,参见djangopackages.com/grids/g/workers-queues-tasks