gpt4 book ai didi

php - 我怎样才能从 Gearman 获得计划的工作列表?

转载 作者:可可西里 更新时间:2023-10-31 23:08:26 24 4
gpt4 key购买 nike

我目前正在评估 Gearman,以便在我们的后端分包一些昂贵的数据导入工作。到目前为止,这看起来很有希望。但是,缺少一件东西,我似乎找不到任何相关信息。 如何从 Gearman 获取计划作业列表?

我知道我可以使用管理协议(protocol)来获取每个函数当前排队的作业数,但我需要有关实际作业的信息。也可以选择使用持久队列(例如 MySQL)并查询数据库中的作业,但我觉得绕过 Gearman 获取此类信息是非常错误的。除此之外,我没有想法。

可能我根本不需要这个:) 所以这里有一些关于我想做的事情的更多背景,我愿意接受更好的建议。客户端和 worker 都在 PHP 中运行。在我们的管理界面中,管理员可以为客户触发新的导入;由于导入需要一段时间,因此它作为后台任务启动。现在我希望能够回答的简单问题是:此客户端的最后一次导入运行是什么时候?导入是否已经为该客户端排队(在这种情况下触发新导入应该没有效果)?很高兴:这个作业在队列中的哪个位置(这样我就可以估计它何时运行)?

谢谢!

最佳答案

Admin 协议(protocol)是您通常使用的协议(protocol),但正如您所发现的,它不会列出队列中的实际任务。我们已经解决了这个问题,方法是跟踪我们在应用程序层中启动的当前任务,并在我们的 worker 中有一个回调告诉应用程序任务何时完成。这允许我们在任务完成时执行清理、通知等,并允许我们将此逻辑保留在应用程序中,而不是 worker 本身。

关于进度,最好的方法是使用 Gearman 本身的内置进度机制,在 PHP 模块中,您可以使用 $job->sendStatus(percentDone, 100) 调用它.然后,客户端可以使用任务句柄(将在您启 Action 业时返回)从服务器检索该值。这将允许您在界面中向用户显示当前进度。

只要您的应用程序中有当前正在运行的任务,您就可以使用它来回答是否有类似的任务已经在运行,但您也可以使用 gearman 的内置作业合并/重复数据删除;添加任务时查看$unique参数。

当前队列中的位置将无法通过 Gearman 获得,因此您也必须在您的应用程序中执行此操作。我不会向 Gearman 持久层询问此信息。

关于php - 我怎样才能从 Gearman 获得计划的工作列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11180291/

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