我正在尝试解决一个问题,我有很多(大约一万个)URL,并且需要从所有这些 URL 中下载内容。到目前为止,我一直在“链接中的链接:”循环中执行此操作,但是现在花费的时间太长了。我认为是时候实现多线程或多处理方法了。我的问题是,最好的方法是什么?
我知道全局解释器锁,但由于我的问题是网络绑定的,而不是 CPU 绑定的,我认为这不会是一个问题。我需要将数据从每个线程/进程传回主线程/进程。我不需要帮助来实现任何方法(当任何线程完成任务时终止多个线程),我需要关于采用哪种方法的建议。我目前的做法:
data_list = get_data(...)
output = []
for datum in data:
output.append(get_URL_data(datum))
return output
没有其他共享状态。
我认为最好的方法是创建一个包含所有数据的队列,并从输入队列中弹出几个工作线程,获取 URL 数据,然后推送到输出队列。
我对吗?有什么我想念的吗?这是我第一次用任何语言实现多线程代码,我知道这通常是一个难题。