Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用mysql在php中创建队列_Php_Mysql_Queue_Ffmpeg_Exec - Fatal编程技术网

如何使用mysql在php中创建队列

如何使用mysql在php中创建队列,php,mysql,queue,ffmpeg,exec,Php,Mysql,Queue,Ffmpeg,Exec,hy 在我的脚本中,我运行一个exec()函数,用ffmpeg生成一个电影文件 问题是ffmpeg只能在服务器上运行1次 如果服务器上有两个人在线,而第一个人已经运行了ffmpeg,我希望第二个人等到第一个人结束这个过程 如何编写此代码 谢谢你对杰布斯的爱。编写一个守护进程来接收消息并处理文件。在某处设置一个锁 当ffmpeg启动时,在文件或数据库表中设置一个标志,将其标记为正在进行。每次ffmpeg启动时,让它检查标志值是否为“1”,如果是,请等待5秒或10秒后重试。然后,当进程结束时,将标志

hy

在我的脚本中,我运行一个exec()函数,用ffmpeg生成一个电影文件

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

如果服务器上有两个人在线,而第一个人已经运行了ffmpeg,我希望第二个人等到第一个人结束这个过程

如何编写此代码

谢谢你对杰布斯的爱。编写一个守护进程来接收消息并处理文件。

在某处设置一个锁

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


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

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

对于PHP队列,您可以尝试使用或类似的方法

  • 你为什么不使用(免费的)比如youtube/vimeo来处理这个问题呢?这比你可能做的更好。Youtube对各种各样的东西都有自己的网站
  • 您是否正在从运行
    exec
    ?如果是这样,请被警告禁止,因为共享主机不希望您以这种方式使用CPU。他们需要短Http请求(在30秒内)。其余的不适用于你的主机,你应该先升级
  • 正如Ignacio所说,您应该安装一个消息队列(需要具有shell访问权限的linux box),例如:

  • 如果您有一个带有ssh访问的linux设备,那么最容易安装的方法就是redis。然后,长时间运行的fffmpeg进程(php脚本)应该连接到redis,并在准备处理视频时从队列中逐个提取消息。客户端只需将消息放入队列即可。我建议大家快速观看,了解redis的基本知识

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

    我无法编译和安装librabbitmq!我无法访问根服务器如何以不同于php的用户身份运行进程?这可以工作,而且速度快,但效率不高。在共享主机上,你做这样的事情肯定会被禁止。@robert如果你在共享主机上,除非你有多个帐户,否则你很可能无法以其他用户的身份运行某些东西。@Alfred我同意这是一种快速而枯燥的解决方案,并不完全是企业级的解决方案。除非你有10个人在排队,否则我看不出他们会因为什么而禁止你。您的主机很可能会设置某种资源限制?无论如何,我认为如果你是在这一点上,最好是得到一个虚拟服务器,是的。很可能共享主机不喜欢不间断的视频编码。