如果这是一个愚蠢的问题,我道歉并将羞辱我的头,但是:
我正在使用rq在Python中排队作业.我希望它像这样工作:
我的代码到目前为止:
redis_conn = Redis()
use_connection(redis_conn)
q = Queue('normal', connection=redis_conn) # this is terrible, I know - fixing later
w = Worker(q)
job = q.enqueue(getlinksmod.lsGet, theURL,total,domainid)
w.work()
Run Code Online (Sandbox Code Playgroud)
我认为我最好的解决方案是拥有2名工人,一名为工作A,一名为B工作.工作B工人可以监督工作A,当工作A完成时,开始工作B.
我无法想象拯救我的生命是我如何让一个工人监视另一个人的状态.我可以通过job.id从作业A中获取作业ID.我可以使用w.name获取工作者名称.但对于我如何将任何信息传递给其他工作人员并不是最模糊的.
或者,有一个更简单的方法来做到这一点,我完全失踪了?
小智 7
更新januari 2015,此拉取请求现已合并,参数重命名为depends_on,即:
second_job = q.enqueue(email_customer, depends_on=first_job)
Run Code Online (Sandbox Code Playgroud)
对于运行较旧版本的人来说原始帖子完好无损,例如:
我已经提交了拉取请求(https://github.com/nvie/rq/pull/207)来处理RQ中的作业依赖性.当此拉取请求合并后,您将能够:
def generate_report():
pass
def email_customer():
pass
first_job = q.enqueue(generate_report)
second_job = q.enqueue(email_customer, after=first_job)
# In the second enqueue call, job is created,
# but only moved into queue after first_job finishes
Run Code Online (Sandbox Code Playgroud)
现在,我建议编写一个包装函数来顺序运行你的工作.例如:
def generate_report():
pass
def email_customer():
pass
def generate_report_and_email():
generate_report()
email_customer() # You can also enqueue this function, if you really want to
# Somewhere else
q.enqueue(generate_report_and_email)
Run Code Online (Sandbox Code Playgroud)
您可能对项目太深入而无法切换,但如果不是,请查看Twisted. http://twistedmatrix.com/trac/我现在正在将它用于一个访问 API、抓取 Web 内容等的项目。它并行运行多个作业,并按顺序组织某些作业,因此作业 B 不会t 执行直到作业 A 完成。
如果您想尝试的话,这是学习 Twisted 的最佳教程。http://krondo.com/?page_id=1327
| 归档时间: |
|
| 查看次数: |
3899 次 |
| 最近记录: |