我正在运行Coldfusion8
,并且有一个cfc,它在一组数据库记录中循环。
每个记录包含两个字段image path
和image file
。我正在为每个图像构建一个路径,将其上传到临时文件夹,调整大小,然后将其存储到S3
。
根据记录的数量,这可能需要相当长的时间,而且我无法成功完成上传周期,上传更大的图像集(最终超时)。
我已经将超时阈值设置为5000
,但似乎还不够。
我可以从我离开的地方开始,因为在上传到S3之前,我会保存一个媒体日志进行检查。这样我就可以完成任务,但我需要触发这个功能5x才能上传400个项目。
问题:
有没有办法在不将httptimeout
设置为某些50000000
的情况下避免超时?在CFTHREAD
中运行它有意义吗?或者如果用户在系统仍在上传时离开导入页面,这会是一个问题吗?
感谢您的真知灼见。
您可以使用CF线程来执行任务,但请确保锁定范围!否则,您可能会多次运行这个内存密集型进程并终止服务器,如果这个进程非常密集,您只希望一次运行一次。
不过,你还有其他选择,如果这不是你的应用程序用户需要运行的东西,而且这是一个一次性的过程,你可以设置一个超时时间非常长的计划任务,在服务器使用率不高的情况下通宵运行,这允许您独立地为应用程序设置超时,以便应用程序的其余部分不受全局超时更改的影响。
另一种选择是,如果这是用户半定期做的事情,那么通过电子邮件、日志或其他方式(Ajax或Websockets)推送通知的线程就完成了。这样做的好处是,可以根据线程生成时动态处理的数据量来更改超时。然而,如果你不小心,你可能会用许多处理大型数据集的线程来超载服务器(加上日志文件读写锁将更难管理)。
不过,我鼓励你把它拿走,看看什么解决方案对你有效,并发布你的最终解决方案,让其他人看到结果。
希望这能有所帮助。