【问题标题】:How to create managers for the worker threads?如何为工作线程创建管理器?
【发布时间】:2012-04-25 18:27:02
【问题描述】:

代码适用于单个“管理器”,它基本上将一些 HTTP GET 发送到服务器。但我碰上了一堵砖墙。

我现在如何创建 2 个管理器,每个管理器都有自己的 Download_Dashlet_Job 对象和 tcp_pool_object?从本质上讲,经理们将指挥他们自己的工人从事两份不同的工作。这似乎是学习 Python 类的一个非常好的谜题。

import workerpool
from urllib3 import HTTPConnectionPool

class Download_Dashlet_Job(workerpool.Job):
  def __init__(self, url):
    self.url = url
  def run(self):
    request = tcp_pool_object.request('GET', self.url, headers=headers)

tcp_pool_object = HTTPConnectionPool('M_Server', port=8080, timeout=None, maxsize=3, block=True)
dashlet_thread_worker_pool_object = workerpool.WorkerPool(size=100)

#this section emulates a single manager calling 6 threads from the pool but limited to 3 TCP sockets by tcp_pool_object
for url in open("overview_urls.txt"):
  job_object = Download_Dashlet_Job(url.strip())
  dashlet_thread_worker_pool_object.put(job_object)

dashlet_thread_worker_pool_object.shutdown()
dashlet_thread_worker_pool_object.wait()

【问题讨论】:

  • 我研究了 Celery ......这很有趣。我看到它在那里有很大的潜力,但对于我正在做的事情可能有点矫枉过正。我基本上只是在为服务器编写负载测试(即,所述服务器是否一次支持 200 多个客户端)。

标签: python multithreading threadpool pool


【解决方案1】:

首先,workerpool.WorkerPool(size=100) 创建 100 个工作线程。在下面的评论中,你是说你想要 6 个线程?您需要将其更改为 6。

为了创建第二个池,您需要创建另一个池。如果愿意,您还可以创建另一个作业类,然后将这种不同类型的作业添加到同一个池中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多