1

サーバーに対して HTTP GETS を実行するためのスレッドを作成するために、workerpool モジュールを使用しています。私はこれまでのところコンセプトが大好きです。URL のリストのダウンロード ジョブを設定し、作業をスレッドのプールに割り当てます。ここまでは順調ですね...

import urllib3
import workerpool
from urllib3 import HTTPConnectionPool

headers = { }
headers['user-agent'] = 'Python-httplib2/0.7.4 (gzip)'
headers['accept-encoding'] = 'gzip, deflate'

class Download_Dashlet_Job(workerpool.Job):
  "This is a download dashlet Job object for downloading a given URL."
  def __init__(self, url):
    self.url = url
  def run(self):
    request = tcp_pool.request('GET', self.url, headers=headers)

#Create a pool of TCP connections for communication to the server (this is using urllib3)
tcp_pool = HTTPConnectionPool('M_Server3', port=8080, timeout=None, maxsize=3, block=True)

# Initialize a pool of three dashlet worker threads to be used for downloading from a page
dashlet_thread_worker_pool = workerpool.WorkerPool(size=3)

# urls.txt is just a text file with 5 urls in it
for url in open("urls.txt"):
  job = Download_Dashlet_Job(url.strip())
  dashlet_thread_worker_pool.put(job)

# Send shutdown jobs to all dashlet worker threads
dashlet_thread_worker_pool.shutdown()
dashlet_thread_worker_pool.wait()

上記のコードはうまく機能しますが、スレッドのプールが 1 つしかありません。だから、ケースは....

シングル ユーザーが Firefox から yahoo を開き、ブラウザが複数のスレッドを起動して yahoo ページからコンポーネントをダウンロードします。

私が今やりたいことはこれです...

10 人のユーザーがブラウザを開いて yahoo にアクセスします。各ユーザーは、yahoo ページからダウンロードするスレッドの独自のセット (つまり、プール) を持っています。

私はこの時点で立ち往生しています。ユーザー用のクラス オブジェクトを作成する必要がありますか? そのオブジェクトはその後、オブジェクト Download_Dashlet_Job を呼び出しますか?

私はそれをやろうとしましたが、完全にだまされました。これは、workerpool を使用するとそれほど難しくないはずですよね?

4

0 に答える 0