【问题标题】:how to make a queue in php with mysql如何使用mysql在php中创建队列
【发布时间】:2010-03-13 02:27:37
【问题描述】:

你,

在我的脚本中,我运行 exec() 函数来使用 ffmpeg 制作电影文件。

问题是ffmpeg在服务器上只能运行1次,

如果有 2 个人在服务器上在线并且第一个已经运行 ffmpeg,我希望第二个等到第一个结束进程

如何编码?

谢谢

【问题讨论】:

    标签: php mysql queue ffmpeg exec


    【解决方案1】:

    在某处设置锁。

    当 ffmpeg 启动时,在文件或数据库表中设置一个标志以将其标记为正在进行中。每次 ffmpeg 启动时,让它检查标志值是否为 '1',如果是,请等待并在 5 或 10 秒后重试。然后当过程结束时,将标志设置为“0”。确保它是否崩溃或您的脚本有错误将标志设置回“0”。

    或者,您可能会以其他用户身份运行 ffmpeg 进程,并且同时运行多个。

    【讨论】:

    • 如何以与 php 不同的用户身份运行进程?
    • 这可以工作并且很快,但效率不高。在共享主机上,你在做这样的事情时肯定会被禁止。
    • @robert 如果您在共享主机上,除非您有多个帐户,否则您很可能无法以其他用户身份运行某些东西。
    • @Alfred 我同意它快速而枯燥,并不完全是企业级解决方案。除非你有 10 个人在排队等候,否则我看不出他们会禁止你做什么。您的主机很可能会设置某种资源限制?无论如何,我认为如果你在那个时候最好获得一个虚拟服务器,是的。共享主机很可能不希望发生不间断的视频编码。
    【解决方案2】:

    感谢 Jebus,don't implement your own queue。编写一个接收消息并处理文件的守护进程。

    【讨论】:

    • 我无法编译和安装 librabbitmq!我无权访问根服务器
    【解决方案3】:
    1. 您为什么不使用video hosting service(free) 之类的,例如youtube/vimeo,这样可以更好地处理此问题,然后您就可以做到。 Youtube 有一个 API 用于各种内容。
    2. 您是从shared hosting 运行exec 吗?如果是这样,请注意被禁止,因为共享主机不喜欢您以这种方式利用 CPU。他们想要简短的 Http 请求(在 30 秒内)。其余不适用于您的主机,您应先升级。
    3. 就像 Ignacio 说的你应该安装一个消息队列(需要具有 shell 访问权限的 linux 机器),例如:

      1. redis 如果你有一个带有 ssh 访问权限的 linux 机器,那么最容易安装的方式就是 redis。然后,您的长时间运行的 fffmpeg 进程(php 脚本)应该连接到 redis 并在准备好处理视频时从队列中一一获取消息。客户端应该只是简单地将消息放在队列中。我建议快速观看video 以了解 redis 的基础知识。
      2. beanstalkd
      3. gearman

    希望这对您有所帮助。我也在用java写一个简单的任务队列,但我还没有完全完成。希望一周后我可以在 github 上提交我的第一个版本。

    【讨论】:

      【解决方案4】:

      您可以使用异步队列。每个新请求都作为消息添加到队列中。您的进程一次读取一条消息并处理转换请求。

      对于 PHP 队列,您可以尝试 Dropr 或类似的。

      【讨论】:

        猜你喜欢
        • 2019-12-14
        • 2017-01-10
        • 1970-01-01
        • 2010-10-23
        • 1970-01-01
        • 2011-09-18
        • 2013-04-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多