(通常) 一度に 1 つまたは 2 つのファイルのみを http 投稿しようとするアプリがありますが、アップロードするファイルのバックログが発生する可能性があります (ファイルサイズ/ネット速度に基づく)。スレッド キュー システムを試して、バックグラウンドでスレッド キューが送信するファイルを処理している間、ユーザーがキューに入力し続けることができるようにしようと考えました。
私はこの答えを機能させるために解体しようとしましたが、役に立ちませんでした。
これが私のコードです:
import threading, urllib2, Queue, os
from poster.encode import multipart_encode
from poster.streaminghttp import register_openers
path = "path/to/files/"
urls_to_load = [os.path.join(path,x) for x in os.listdir(path)]
def read_url(file, queue):
register_openers()
datagen, headers = multipart_encode({"myfile": open(file, "rb")})
request = urllib2.Request("http://localhost/appname/upload", datagen, headers)
queue.put(urllib2.urlopen(request).read())
def fetch_parallel():
result = Queue.Queue()
threads = [threading.Thread(target=read_url, args = (url,result)) for url in urls_to_load]
for t in threads:
t.start()
for t in threads:
t.join()
return result
result = Queue.Queue()
for url in urls_to_load:
read_url(url,result)
print result
ただし、許可エラーが発生します。
Traceback (most recent call last):
File "C:/Users/tmiller/Desktop/multiBro.py", line 78, in <module>
datagen, headers = multipart_encode({"myfile": open(i, "rb")})
IOError: [Errno 13] Permission denied: 'the file'
アクセス違反が発生していると思いますが、これを防ぐにはどうすればよいですか?
Web サーバーは基本的にthisを実行しています。ありがとう!