【发布时间】:2023-12-04 11:54:01
【问题描述】:
我正在尝试使用 python cgi 中的多线程将多个文件(ard 25k)放入一个 zip 文件中。我已经编写了下面的脚本,但不知何故,我得到的响应内容长度为 0,响应中没有数据。这是我第一次在 python 中使用多线程。我在代码中遗漏了什么。是否在发布数据之前就打印输出?
任何帮助将不胜感激。
这是我的代码:
b = StringIO()
z = zipfile.ZipFile(b, 'w', zipfile.ZIP_DEFLATED)
def read_file(link):
fname = link.split('/')
fname = fname[-1]
z.write(link, fname)
if __name__ == '__main__':
form = cgi.FieldStorage()
fileLinks = form.getvalue("fileLink")
p = Pool(10)
p.map(read_file, fileLinks)
p.close()
p.join()
z.close()
zipFilename = "DataFiles-" + str(time.time()) + ".zip"
length = b.tell()
sys.stdout.write(
HEADERS % ('application/zip', zipFilename, zipFilename, length)
)
b.seek(0)
sys.stdout.write(b.read())
b.close()
相同代码的顺序版本:
for fileLink in fileLinks:
fname = fileLink.split('/')
filename = fname[-1]
z.write(fileLink, filename)
z.close()
【问题讨论】:
-
算法的单线程版本是否按预期工作?
-
感谢评论,让我试试看。
-
我尝试过使用单线程并将文件数限制为 1000。它不起作用。它给出了相同的响应,内容长度为零。
-
那么问题不在于多线程!
-
相同代码的顺序版本有效。将代码添加到问题中。
标签: python multithreading python-2.7 cgi python-multiprocessing