首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在php中使用多线程

如何在php中使用多线程
EN

Stack Overflow用户
提问于 2012-05-07 21:44:09
回答 6查看 880关注 0票数 4

我现在正在开发一个关于在互联网上分享视频的网站。流程如下:用户上传视频->,服务器端接收视频,并使用ffmpeg将视频格式转换为flv ->,用户继续在站点中做其他事情。现在我想建立另一个线程来做转换工作(使用ffmpeg将视频格式转换为flv),这样用户就可以做其他事情,而无需等待视频转换为flv。但是不知道怎么做!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-05-07 21:45:54

PHP不支持线程。您应该使用由cron脚本运行的后台任务来实现这一点。

您可以有一个包含要处理的作业的表,例如,包含磁盘上的文件名、状态(挂起、正在转换、就绪)等,然后让脚本获取所有挂起的作业,将其状态更改为正在转换,转换文件,然后将状态更改为就绪。通过这种方式,您还可以向用户显示信息,并且如果您希望同时转换多个文件,则可以运行多个脚本。

票数 6
EN

Stack Overflow用户

发布于 2012-05-07 21:46:25

将需要转换的视频排成一个队列,例如使用cron作业逐个转换视频。这个队列可以存储在类似消息队列或数据库的东西中。

使用数据库,您可以创建一个包含IDStartDatetimeEndDatetimeFilenameStatusOwner列的表,并在上传视频时适当地设置这些列。当一些用户请求他或她的任何视频的状态时,您只需在数据库中查找状态,其中(例如)1=已添加,2=当前正在处理,3=完成,4=错误。

现在,cron作业开始逐个处理状态为1的所有项;在处理时,它会将其更新为2,然后相应地更新为3或4。

通过所有的fork/exec/run-on-on- By like解决方案,你可以立即开始处理上传的视频,你就是在允许所有用户阻塞服务器。如果多个用户同时开始处理大型视频,该怎么办?您无法控制单独的进程,并且所有这些进程都同时运行,这可能会大大减慢服务器的速度。

通过使用一个进程(通过cron启动)按顺序处理项目,您可以更好地管理正在使用的资源。

票数 2
EN

Stack Overflow用户

发布于 2012-05-07 21:46:43

看起来像是job server的工作。只需将其添加为background task即可

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10483200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档