内容简介:python-rq简单好用,但缺点是,默认的实现是使用fork的模式,关于这点可以看python-rq源码分析 。所以我们要对他进行改造,每次执行任务,我们就使用一个coroutine。gevent的文档中这样写道:因此,我们在最上面就开始进行 monkey patch。此外,我把queue定义在了
python-rq简单好用,但缺点是,默认的实现是使用fork的模式,关于这点可以看python-rq源码分析 。
所以我们要对他进行改造,每次执行任务,我们就使用一个coroutine。gevent的文档中这样写道:
Patching should be done as early as possible in the lifecycle of the program.
因此,我们在最上面就开始进行 monkey patch。此外,我把queue定义在了 jobs/queue.py
里。直接上代码:
# worker.py import gevent.monkey gevent.monkey.patch_all() # noqa import logging from rq.worker import ( Worker, WorkerStatus, ) import redis from config import config from jobs import ( money_q, message_q, ) class GeventWorker(Worker): def execute_job(self, job, queue): self.set_state(WorkerStatus.BUSY) self.log.debug("gonna spawn a greenlet to execute job %s from queue", job, queue) gevent.spawn(self.perform_job, job, queue).join() self.log.debug("job %s from queue %s executed", job, queue) self.set_state(WorkerStatus.IDLE) def gevent_worker(queues): worker = GeventWorker( queues=queues, connection=redis.StrictRedis.from_url(config.WORKER_BROKER) ) worker.work() if __name__ == "__main__": gevent_worker([money_q, message_q])
# queue.py from rq import Queue import redis from config import config __conn = redis.StrictRedis.from_url(config.WORKER_BROKER) money_q = Queue("money", connection=__conn) message_q = Queue("message", connection=__conn)
解释一下实现原理:
首先阅读 rq 默认的worker实现,就会发现,所有的worker都有 execute_job
这个方法,因此我们继承 Worker
并且
重写这个方法,在我们的实现里,新起一个coroutine来执行相关代码。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 给Markdown添加视频支持
- Spring Boot 添加 JSP 支持
- 为nginx添加SSL支持模块
- PostgreSQL添加了GSSAPI加密支持
- NutzBoot v2.1.5 添加单元测试支持及 ssdb 支持
- Docker Desktop添加对Kubernetes的支持
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Beginning Java Objects中文版从概念到代码
巴克 / 万波 / 人民邮电出版社 / 2007-1 / 78.00元
《Beginning Java Objects中文版从概念到代码(第2版)》是关于软件对象和Java的,但并不是纯粹地介绍Java语言,而是强调如何从对象模型转换到功能完整的Java应用程序。书中讲述了对象基础、对象建模和模型的实现。《Beginning Java Objects中文版从概念到代码(第2版)》除了用学生注册系统(SRS)示例贯穿全书之外,还在附录中给出三个附加的案例,这些案例是每章......一起来看看 《Beginning Java Objects中文版从概念到代码》 这本书的介绍吧!