假设我有一个包含 1000 个唯一网址的列表,我需要打开每个网址,并断言
页面上有某些内容。按顺序执行此操作显然是一个糟糕的选择,因为大多数时候程序都会闲置只是等待响应。因此,添加到一个线程池中,每个工作线程从主队列中读取数据,并打开一个 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)
最佳答案
您最好的选择可能是编写一些代码,使用您指定的线程数运行一些测试,并查看有多少线程产生最佳结果。有太多变量(处理器速度、总线速度、线程开销、核心数量以及代码本身的性质),我们无法冒险猜测。
关于python - 在进行网络编程时,是否有经验法则来确定使用多少个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16284014/