【发布时间】:2010-03-13 02:27:37
【问题描述】:
你,
在我的脚本中,我运行 exec() 函数来使用 ffmpeg 制作电影文件。
问题是ffmpeg在服务器上只能运行1次,
如果有 2 个人在服务器上在线并且第一个已经运行 ffmpeg,我希望第二个等到第一个结束进程
如何编码?
谢谢
【问题讨论】:
标签: php mysql queue ffmpeg exec
你,
在我的脚本中,我运行 exec() 函数来使用 ffmpeg 制作电影文件。
问题是ffmpeg在服务器上只能运行1次,
如果有 2 个人在服务器上在线并且第一个已经运行 ffmpeg,我希望第二个等到第一个结束进程
如何编码?
谢谢
【问题讨论】:
标签: php mysql queue ffmpeg exec
在某处设置锁。
当 ffmpeg 启动时,在文件或数据库表中设置一个标志以将其标记为正在进行中。每次 ffmpeg 启动时,让它检查标志值是否为 '1',如果是,请等待并在 5 或 10 秒后重试。然后当过程结束时,将标志设置为“0”。确保它是否崩溃或您的脚本有错误将标志设置回“0”。
或者,您可能会以其他用户身份运行 ffmpeg 进程,并且同时运行多个。
【讨论】:
感谢 Jebus,don't implement your own queue。编写一个接收消息并处理文件的守护进程。
【讨论】:
exec 吗?如果是这样,请注意被禁止,因为共享主机不喜欢您以这种方式利用 CPU。他们想要简短的 Http 请求(在 30 秒内)。其余不适用于您的主机,您应先升级。就像 Ignacio 说的你应该安装一个消息队列(需要具有 shell 访问权限的 linux 机器),例如:
希望这对您有所帮助。我也在用java写一个简单的任务队列,但我还没有完全完成。希望一周后我可以在 github 上提交我的第一个版本。
【讨论】:
您可以使用异步队列。每个新请求都作为消息添加到队列中。您的进程一次读取一条消息并处理转换请求。
对于 PHP 队列,您可以尝试 Dropr 或类似的。
【讨论】: