cfx_openImage是否支持多线程,如果是,它是否有效利用资源?
谷歌在这方面没什么帮助。当然,我会在转向生产之前自己测试一下。然而,我的所有测试多线程imageCR3工作得非常好,但零星(但严重)问题开始出现在生产一周左右。因此,我想向那些可能尝试在大批量生产环境中实施此项目的人提供非法反馈。
具体来说,我有一个四核服务器。每一分钟一个进程运行,从等待处理"等待处理中提取一定数量的图像。名单。然后,我通过此列表处理图像处理带有imageCR3的图像,目前按顺序排列,这很慢,因为只有一个核心被充分利用。相反,我希望以一个四步循环并在内部循环中生成另一个cfThread以并行处理四个图像:
<cfset stepSize = "5">
<cfloop from="1" to="#info.recordcount#" index="batchStart" step="#stepSize#">
<cfset threadList = "">
<cfloop query="info" startrow="#batchStart#" endrow="#Evaluate("(batchStart + stepSize) - 1")#">
<cfset threadList = listAppend(threadList, "imageProc#info.ID#")>
<cfthread action="run" ...>
<CFX_OPENIMAGE CALL GOES HERE ...>
</cfthread>
</cfloop>
<cfthread action="join" name="#threadList#" timeout="30000"/>
</cfloop>
实际线程会在10万像素的图像上多次调用cfx_openImage,创建尺寸从1500像素到100像素的缩略图,然后进行数据库更新并将原始文件移动到存档位置。
使用imageCR3,这似乎可以正常运行并在QA中运行。但是,在生产中,一些图像会出现多次(可能是由于缓存)。更常见的情况是,图像处理会因未指定的错误而失败。我使用它很多,但找不到解决方案,Efflair支持忽略了我的所有电子邮件。