0

我正在运行Coldfusion8并且有一个 cfc,它循环通过一组数据库记录。

每条记录包含两个字段image pathimage file. 我正在为每个图像构建一个路径,将其上传到临时文件夹,调整大小然后将其存储到S3.

根据记录的数量,这可能需要相当长的时间,而且我无法使用更大的图像集成功完成上传周期(最终超时)。

我已经将超时阈值设置为5000,但似乎还不够。

我可以从我离开的地方继续,因为在上传到 S3 之前,我会保留一个媒体日志以进行检查。这样我可以完成任务,但是我需要触发这个函数 5x 才能上传 400 个项目。

问题:
有没有办法避免超时而不设置(在 S3 情况下)httptimeoutsome 50000000CFTHREAD如果用户在系统仍在上传时离开导入页面,那么在 a 中运行它是否有意义,或者这是否会成为问题?

感谢您的一些见解。

4

1 回答 1

3

您可以使用 CFthread 执行任务,但请确保锁定范围!否则你可能会多次运行这个内存密集型进程并终止服务器,如果它如此密集,你只希望这个进程一次运行一次。

但是,您还有其他选择,如果这不是您的应用程序用户需要运行的东西,并且它是您做的一次性过程,您可以设置一个具有超长超时时间的计划任务,以便在服务器不是很正常的情况下在一夜之间运行高使用率,这允许您为应用程序独立设置超时,因此应用程序的其余部分不受全局超时更改的影响。

另一种选择是,如果这是用户半定期做的事情,那么通过电子邮件、日志或其他方式(Ajax 或 Websockets)推送通知的线程让用户知道他们的任务已完成。这样做的好处是可以更改超时,根据线程生成时动态处理的数据量来计算。但是,如果您不小心,您的服务器可能会因处理大型数据集的许多线程而过载(加上日志文件读写锁将更难管理)。

不过,我会鼓励你把它拿走,看看什么样的解决方案对你有用,然后发布你的最终解决方案,这样其他人就可以看到结果是什么。

希望这可以帮助。

于 2012-09-26T08:12:45.453 回答