我正在使用一个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
处理Redis连接的最佳模式是什么(直接与Redis交互以及通过Python-RQ间接交互)?通常,完成后需要关闭数据库连接/将其返回到池中,但我不知道如何使用redis-py来做到这一点。这让我怀疑我是不是做错了。另外,在将作业排队到RQ时,我发现性能下降,有人告诉我这可能与连接使用/重用不佳有关。基本上,我对了解正确的模式很感兴趣,因此我可以验证或更正我们应用程序中的内容。非常感谢!如果有更多有用的信息,请告诉我。 最佳答案 在幕后,redis-py使用连接池来管理与Redis服务器的连接。默认情况下,您创建的每个Redis实例
我想使用rq对我的ml预测进行排队。示例代码(伪类):预测.py:importtensorflowastfdefpredict_stuff(foo):model=tf.load_model()result=model.predict(foo)returnresultapp.py:fromrqimportQueuefromredisimportRedisfrompredictimportpredict_stuffq=Queue(connection=Redis())forfooinbaz:job=q.enqueue(predict_stuff,foo)worker.py:importsy