Php 一次运行多个Symfony命令

Php 一次运行多个Symfony命令,php,multithreading,symfony,command,Php,Multithreading,Symfony,Command,我在Symfony设置中实现了一个命令,它从数据库中获取一个作业,然后对其进行处理 如何一次运行多个命令实例,以更快地完成作业。我知道PHP不支持多线程,但由于命令是从shell调用的,我想知道是否有解决方法 使用以下命令调用命令: 应用程序/控制台作业:处理我解决这个问题的方法是使用一个包含多个工作人员的工作队列。与手动运行多个进程和担心并发性相比,它更易于管理和扩展 我发现使用php/symfony时最简单的通用队列是,您可以使用将其集成到symfony2中。我解决这个问题的方法是使用一个包

我在Symfony设置中实现了一个命令,它从数据库中获取一个作业,然后对其进行处理

如何一次运行多个命令实例,以更快地完成作业。我知道PHP不支持多线程,但由于命令是从shell调用的,我想知道是否有解决方法

使用以下命令调用命令:


应用程序/控制台作业:处理

我解决这个问题的方法是使用一个包含多个工作人员的工作队列。与手动运行多个进程和担心并发性相比,它更易于管理和扩展


我发现使用php/symfony时最简单的通用队列是,您可以使用

将其集成到symfony2中。我解决这个问题的方法是使用一个包含多个worker的工作队列。与手动运行多个进程和担心并发性相比,它更易于管理和扩展


我发现使用php/symfony时最简单的通用队列是,您可以将它集成到symfony2中,使用

一般来说,我建议使用库。您可以从各种可用的传输中进行选择,从最简单的文件系统和DBAL到real once,如RabbitMQ和Amazon SQS

关于消费者,您需要某种流程管理器。有几种选择:

  • -你需要额外的服务。它必须正确配置

  • 一个纯粹的PHP进程管理器。基于Symfony进程组件和纯PHP代码。它可以处理进程重新启动、sigterm信号正确退出以及更多

  • php\s OLE进程管理器,如。它需要一个SwoolePHP扩展,但它的性能是惊人的


  • 一般来说,我建议使用图书馆。您可以从各种可用的传输中进行选择,从最简单的文件系统和DBAL到real once,如RabbitMQ和Amazon SQS

    关于消费者,您需要某种流程管理器。有几种选择:

  • -你需要额外的服务。它必须正确配置

  • 一个纯粹的PHP进程管理器。基于Symfony进程组件和纯PHP代码。它可以处理进程重新启动、sigterm信号正确退出以及更多

  • php\s OLE进程管理器,如。它需要一个SwoolePHP扩展,但它的性能是惊人的


  • 我写了一篇关于如何解决这个问题的博客文章

    在这里重新显示所有内容太长了,但基本概念是您的命令可以选择性地接收作业的ID。该命令将检查是否提供了ID。如果没有,那么它将从数据库抓取所有作业,循环它们,并使用job ID参数调用自己。当每个命令被启动时,您将其存储在一个数组中,如果数组太大,您将睡眠以进行速率调节。命令完成后,可以将其从阵列中删除

    当使用作业ID运行该命令时,它将使用创建一个锁,以便作业不会意外地一次处理两次。在作业完成或出错时解锁作业非常重要。一旦它有了ID和锁,它就会调用您为实际处理作业而编写的任何代码


    使用这项技术,我将运行数小时的命令(因为它同步完成每个任务)转化为只需几分钟的时间。确保尝试不同的节流措施来平衡资源利用率和执行任务所需的时间。

    我写了一篇关于如何解决这个问题的博客文章

    在这里重新显示所有内容太长了,但基本概念是您的命令可以选择性地接收作业的ID。该命令将检查是否提供了ID。如果没有,那么它将从数据库抓取所有作业,循环它们,并使用job ID参数调用自己。当每个命令被启动时,您将其存储在一个数组中,如果数组太大,您将睡眠以进行速率调节。命令完成后,可以将其从阵列中删除

    当使用作业ID运行该命令时,它将使用创建一个锁,以便作业不会意外地一次处理两次。在作业完成或出错时解锁作业非常重要。一旦它有了ID和锁,它就会调用您为实际处理作业而编写的任何代码


    使用这项技术,我将运行数小时的命令(因为它同步完成每个任务)转化为只需几分钟的时间。请确保尝试不同的限制,以平衡资源利用率和执行任务所需的时间。

    通过将
    命令的n个实例作为辅助对象来实现这一点。然后是一个shell脚本,确保没有工人变成僵尸。谢谢通过使用n个
    命令的实例
    ,作为辅助程序来实现这一点。然后是一个shell脚本,确保没有工人变成僵尸。谢谢PHP支持多线程:PHP支持多线程: