为服务器密集型进程暂停和恢复ColdFusion代码

时间:2012-08-16 15:58:31

标签: coldfusion coldfusion-9

我有一个循环,运行了几千条记录,对于每个记录,它点击是在服务器上进行一些图像大小调整和操作。该过程在小型记录集的测试中运行良好,但当它移动到实时服务器时,我希望在50个记录之后暂停并恢复该过程,因此服务器不会被征税到性能缓慢或完全退出。

代码如下所示:

<cfloop query="imageRecords">
    <!--create and save images to server - sometimes 3 - 7 images for each record -->
</cfloop>
像我说的那样,我想在50条记录之后暂停,然后从中断处继续。我查看cfschedule,但不确定如何将其用于此。

我还查看了sleep()函数,但文档讨论了在cfthread标记中使用它的问题。其他人发布了关于使用它来模拟长流程的文章。

所以,我不确定sleep()能否以我需要的方式安全地使用。

服务器是CF9,db是MySQL。

2 个答案:

答案 0 :(得分:3)

我会在数据库中创建一个名为working的列,默认为0,一旦图像更新,将标志设置为1.然后您的查询可以是

SELECT TOP 50 imagename
FROM images
WHERE worked = 0

然后设置CF计划任务以每x分钟运行

答案 1 :(得分:0)

这是一种不同的方法,您可以将其与任何其他方法结合使用:

<cfscript>
th=CreateObject("java","java.lang.Thread");
th.setPriority(th.MIN_PRIORITY);
// Your work here
th.setPriority(th.NORM_PRIORITY);
</cfscript>

应该将线程设置为低于为其他请求提供服务的其他线程的优先级。从理论上讲,您可以在最短的时间内完成工作,但对其他用户的影响较小。我还没有机会测试这个,所以你的里程可能会有所不同。