gpt4 book ai didi

php - 如何用Gearman实现循环任务列表?

转载 作者:行者123 更新时间:2023-11-29 02:03:23 25 4
gpt4 key购买 nike

我的 MySQL 数据库中有一个包含 20 万条记录的表。每条记录都包含一个应该以某种方式处理的 URL。在我的案例中,URL 处理不是一项简单的任务,因此我选择使用 Gearman排队以将这些作为后台作业运行。

因此,对于我表中的每条记录 (URL),我计划创建单独的任务并将其提供给 Gearman。

此外,我表中的数据不是静态的,并且经常会在其中添加新的 URL。

根据我的业务逻辑,我需要不断处理这个 url 列表。当我完成对数据库表中最后一条记录的处理后,我应该移至第一条记录并再次对所有记录重复该过程。

所以我的问题:

  • 这种情况下如何更好的给Gearman提供任务?
  • 我应该使用 cron 还是可以组织 Gearman 自动拉取任务的逻辑?
  • 一次可以向 Gearman 提交多少任务?

那么,您能告诉我如何最好地实现这个系统吗?

最佳答案

听起来你需要的是一个队列,其中处理过的项目被添加回队列的底部。我建议像这样组织工作流程:

  1. 一旦新 URL 出现在您的系统中,将其添加到 Gearman 后台作业队列。

  2. 在 Gearman worker 实现中,处理完作业后,再次将其添加到队列中。

通过这种方式,您将按照添加到队列的顺序不断处理 URL,并且整个队列将被无限重复。当然,这是假设您重复执行一项任务。

如果任务不止一项(例如,首先,对所有 URL 执行任务 #1,然后执行任务 #2,等等),您可以遵循类似的模式,只需将作业发送到第二个队列(例如,不同的工作人员)第一个任务之后。然后,根据您想要订购工作的准确程度,您将看到一切自动发生(如果两个工作人员始终可用),或者您将需要监视队列 #1 并且仅在它为空时启动工作人员 #2 .有关此类监控的详细信息,请参阅 Any way to access Gearman administration?

一般来说,Gearman 可以轻松快速地处理 200,000 件元素。现在,使用持久队列会减慢速度(它本质上是一个 MySQL/其他数据库连接),但不应该做任何可怕的事情。我自己并没有尝试过,但成功的故事通常涉及更多的项目,而且通常也有一个持久的队列。

您唯一需要注意的是 Gearman 不允许批量处理作业(例如同时处理 10 个项目)。当您处理 URL 时,这意味着您将需要一次处理 1 个 URL,这是昂贵的,因为您需要等待每个 URL 被单独下载。您可以通过使用事件驱动/非阻塞编程语言进行处理来避免它,或者您可以查看 beanstalkd ,它允许这样的批处理。

关于php - 如何用Gearman实现循环任务列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10847288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com