【发布时间】:2014-09-19 06:30:48
【问题描述】:
我需要从 url 下载一个 excel 文件列表并将它们保存在一个文件夹中。 (最多可以有 200 个文件左右。)我从以下代码开始循环和下载每个文件:
<cfloop query="idsToDownload">
<cfset fileURL = "https://myLink/#downloadID#" /><!--- link to an xlsx file --->
<cfexecute name="curl" arguments = "#fileURL# -k" timeout="10" outputFile="#downloadID#.xlsx" />
</cfloop>
这会下载每个文件并将它们保存在 Coldfusion 临时目录中。 (现在,只是为了测试——最终我们将决定我们希望它们存储在哪里并使用路径更新outputFile。)这很好,除了最终达到 cfloop 时间限制(大约 30 个文件下载之后)。但无论如何,我们真的很想为每次下载启动一个线程,以最大限度地提高效率。所以我在循环中添加了一个 cfthread 标记(免责声明:我是 cfthreading 的新手):
<cfloop query="idsToDownload">
<cfthread name="download_#downloadID#" action="run">
<cfset fileURL = "https://myLink/#downloadID#" />
<cfexecute name="curl" arguments = "#fileURL# -k" timeout="10" outputFile="#downloadID#.xlsx" />
</cfthread>
</cfloop>
我假设这将像以前一样执行,除了每次下载都将在异步线程中运行。但是,当我运行它时,什么也没有发生。我在页面上没有收到任何错误,但 ColdFusion 临时文件中没有显示任何文件(就像使用简单的无线程 cfloop 一样)。这段代码有什么问题?
编辑:
我也尝试过一次下载的单线程,它工作正常:
<cfthread name="downloadFile" action="run">
<cfset fileURL = "https://myLink/123" />
<cfexecute name="curl" arguments = "#fileURL# -k" timeout="10" outputFile="123.xlsx" />
</cfthread>
所以 cfloop/cfthread 组合似乎有问题...
【问题讨论】:
-
你没有在页面上看到错误并不意味着没有发生。您只会看到从主线程生成的错误。要检查其他线程上的错误,请查看您的异常日志。
-
@DanBracuk - 我知道可能存在错误,我只是不确定它们是什么以及如何找到它们。
标签: multithreading curl coldfusion