假设我有一个包含 1000 个唯一 url 的列表,我需要打开每一个,并且assert
页面上的内容就在那里。按顺序执行此操作显然是一个糟糕的选择,因为大多数情况下程序将处于空闲状态,只是等待响应。因此,添加到线程池中,每个工作人员从 main 读取Queue
,并打开一个 url 进行检查。我的问题是,我要把游泳池弄多大?它是基于我的网络带宽还是其他一些指标?是否有任何经验法则,或者只是为了找到有效尺寸而反复试验?
这更像是一个理论问题,但这是我正在使用的代码的基本轮廓。
if __name__ == '__main__':
#get the stuff I've already checked
ID = 0
already_checked = [i[ID] for i in load_csv('already_checked.csv')]
#make sure I don't duplicate the effort
to_check = load_csv('urls_to_check.csv')
links = [url[:3] for url in to_check if i[ID] not in already_checked]
in_queue = Queue.Queue()
out_queue = Queue.Queue()
threads = []
for i in range(5):
t = SubProcessor(in_queue, out_queue)
t.setDaemon(True)
t.start()
threads.append(t)
writer = Writer(out_queue)
writer.setDaemon(True)
writer.start()
for link in links:
in_queue.put(link)