Web应用程序产生工作者,线程 - redis队列vs直接产生线程

时间:2017-06-20 21:47:45

标签: python django multithreading queue task-queue

我的同事写了这个

class Worker(object):
    WORKER_LIMIT = 2
    queue = Queue()

    @classmethod
    def enqueue(cls, _type, args):
        cls.queue.put((_type, args))

    @classmethod
    def handle_event(cls, event):
        pass

    @classmethod
    def worker(cls):
        while True:
            event = cls.queue.get(True)
            cls.handle_event(event)
            cls.queue.task_done()

    @classmethod
    def start(cls):
        for i in range(cls.WORKER_LIMIT):
            w = Thread(target=cls.worker)
            w.daemon = True
            w.start()

worker = Worker()
worker.start()

他用它来产生后台进程来运行繁重的任务(这很棒)。但我对此感到非常不满。这会让很多僵尸?我们的应用服务器使用nginx和gunicorn运行。

我自己会使用一些redis任务队列将工作发送到外面的工作人员。我不喜欢直接来自网络应用程序的spawn线程的想法。你们有什么想法吗?

0 个答案:

没有答案