我有两种作业:一种是我想串行运行的,另一种是我想同时并行运行的。但是,我希望并行作业以串行方式安排(如果您仍在关注)。即:做A。等待A,做B。等待B,同时执行2个以上版本的C。我认为它有2个redis队列,一个只有一个worker的serial_queue。还有一个parallel_queue,上面有多个worker。serial_queue.schedule(scheduled_time=datetime.utcnow(),func=job_a,...)serial_queue.schedule(scheduled_time=datetime.utcnow(),func=job_b,
我正在尝试使用django_rq在Redis中排队一项基本工作,一个用于排队作业并在后台与工作人员一起处理它们的python库,但是简单的调用会抛出一个:AttributeError:'dict'objecthasnoattribute'__module__'我已将问题追溯到这个line在rq图书馆:ifnotisinstance(f,string_types)andf.__module__=='__main__':raiseValueError('Functionsfromthe__main__modulecannotbeprocessed''byworkers.')我正在将一个函数
我正在使用一个Redis服务器来排队工作任务和缓存,因为我不希望出现键冲突,所以我想知道Python-RQ使用什么键名来存储它的数据。 最佳答案 答案隐藏在contrib选项卡中,在internals下here,AlljobsarestoredinRedisundertherq:job:prefix,forexamplerq:job:55528e58-9cac-4e05-b444-8eded32e76a1进一步阅读表明所有元数据都存储在那里,所以答案只是以rq:job开头的键,所以你(或我?)应该是安全的。
我正在将项目迁移到Django并且喜欢使用django-rq模块。但是,我不知道该放什么:importdjango_rqqueue=django_rq.get_queue('high')queue.enqueue(func,foo,bar=baz)如何调用func?这可以是像path.file.function这样的字符串吗?函数是否需要驻留在同一个文件中? 最佳答案 创建要包含的tasks.py文件fromdjango_rqimportjob@job("high",timeout=600)#timeoutisoptionaldef
我在失败队列中有1个失败的作业。$rqinfofailed|█11queues,1jobstotal作为answered@ByronRuth,我可以通过这种方式获得该号码:fromrqimportQueuefromredisimportRedisq=Queue('failed',connection=Redis())printlen(q.jobs)在rq-dashboard上,我看到了回溯:Traceback(mostrecentcalllast):File"/usr/local/lib/python2.7/dist-packages/rq/worker.py",line588,inp
尽量避免RQ显示关于使用meta字典进行任意属性使用的警告消息(到控制台)。我们按规定使用它,但警告继续显示。显示的警告如下:/usr/local/lib/python2.7/site-packages/rq/job.py:381:SyntaxWarning:GettingcustompropertiesfromthejobinstancedirectlywillbeunsupportedasofRQ0.4.Pleaseusethemetadicttostoreallcustomvariables.Soinsteadofthis:job.fooUsethis:job.meta['foo
我已经开始使用RQ/Redis为我的django站点构建一些异步执行的一些长时间运行的作业。我希望做如下事情:我希望模型的每个实例都有一个队列。你可以把这个模型想象成一个api用户帐户。(这些不会有很多。最多15-20个)我将在队列中平均分配任务批处理(从10到500不等)。在第一个批处理完成之前可以添加多个批处理。对于每个批处理,我想为每个未积极处理的队列启动一个工作人员,我想以批处理模式运行这些工作人员,以便一旦他们用完任务将关闭。我意识到我不能以批处理模式运行它们,然后我会一直处理/监听所有队列上的工作。这样做的问题是我希望能够动态地添加和删除队列,因此最好在每批中启动可用队列。
在Python-RQ中减少机器上工作人员数量的好方法是什么?Accordingtothedocumentation,我需要向机器上的工作进程之一发送SIGINT或SIGTERM命令:TakingdownworkersIf,atanytime,theworkerreceivesSIGINT(viaCtrl+C)orSIGTERM(viakill),theworkerwaituntilthecurrentlyrunningtaskisfinished,stoptheworkloopandgracefullyregisteritsowndeath.If,duringthistakedownp
尝试横向扩展用作Python-RQ任务服务器的Redis实例.据我所知,最好的方法是将分片逻辑(最有可能使用ConsistentHashing)添加到自定义ConnectionPool和/或Connection类。我宁愿使用用于一致性哈希机制的库-因为它看起来应该是可用的,并且很可能比本土解决方案更好/经过更多实战检验。做这样的事情什么是好的模式?有没有我应该研究的图书馆?有什么我应该考虑的遗漏吗?非常感谢! 最佳答案 我认为您应该牢记几件事。第一个是关于你的瓶颈在哪里以及为什么你应该在一个Python-Rq范例下在你的Redis后
试图找到一种捕捉RQ超时的好方法作业,因此可以在超时后重新排队。基本上,正确的解决方案将提供一种方法(例如,工作程序中的异常处理程序或类似的东西)来重新排队超时的作业。此外,如果作业返回到failed队列,这也是一个很好的答案。非常感谢!任何帮助将不胜感激! 最佳答案 听起来您想使用exceptionhandling.来自文档:Jobscanfailduetoexceptionsoccurring.WhenyourRQworkersruninthebackground,howdoyougetnotifiedoftheseexcept