파이썬 cgi에서 다중 쓰레드를 사용하여 zip 파일에 여러 개의 파일 (ard 25k)을 넣으려고합니다. 나는 아래 스크립트를 작성했지만 어떻게 든 응답은 내용 길이가 0이고 응답에 데이터가 없습니다. 파이썬에서 멀티 쓰레딩을 처음 사용했습니다. 코드에서 누락 된 것이 있습니까? 데이터가 게시되기 전에 출력물이 인쇄됩니까?파이썬에서 다중 쓰레드를 사용하여 파일 다운로드하기
도움이 될 것입니다. 동일한 코드의
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()
알고리즘의 단일 스레드 버전이 예상대로 작동합니까? – Apalala
의견을 보내 주셔서 감사합니다. –
단일 스레드로 시도하고 파일 수를 1000 개로 제한했습니다. 작동하지 않습니다. 콘텐츠 길이가 0 인 동일한 응답을 제공합니다. –