一度に複数のファイルをダウンロードする方法として、スレッドの実験を始めたところです。私の実装では、thread.start_new_thread() を使用しています。
一度に 10 個のファイルをダウンロードし、10 個のファイルすべてのダウンロードが完了するまで待ってから、次の 10 個のファイルを開始したいと考えています。以下の私のコードでは、download() が exit()、sys.exit()、または return で終了しても、threading.activeCount() が減少することはありません。
私の回避策は、downloadsRemaining カウンターを導入することでしたが、アクティブなスレッドの数が増え続けています。以下のサンプル プログラムの最後には、500 のアクティブなスレッドがありますが、実際には一度に 10 だけが必要です。
import urllib
import thread
import threading
import sys
def download(source, destination):
global threadlock, downloadsRemaining
audioSource = urllib.urlopen(source)
output = open(destination, "wb")
output.write(audioSource.read())
audioSource.close()
output.close()
threadlock.acquire()
downloadsRemaining = downloadsRemaining - 1
threadlock.release()
#exit()
#sys.exit() None of these 3 commands decreases threading.activeCount()
#return
for i in range(50):
downloadsRemaining = 10
threadlock = thread.allocate_lock()
for j in range(10):
thread.start_new_thread(download, (sourceList[i][j], destinationList[i][j]))
#while threading.activeCount() > 0: <<<I really want to use this line rather than the next
while downloadsRemaining > 0:
print "NUMBER ACTIVE THREADS: " + str(threading.activeCount())
time.sleep(1)