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