首先,我建议避免像瘟疫一样使用urllib,而使用requests,它非常容易支持代理:http://docs.python-requests.org/en/latest/user/advanced/#proxies
其次,我没有将它用于多线程,而是用于多处理,这非常有效,您唯一需要弄清楚的是,您是否有一个动态队列或一个相当固定的列表,您可以将其分布在workers上,后者将URL列表均匀地分布在x个进程上:# *** prepare multi processing
nr_processes = 4
chunksize = int(math.ceil(total_nr_urls / float(nr_processes)))
procs = []
# *** start up processes
for i in range(nr_processes):
start_row = chunksize * i
end_row = min(chunksize * (i + 1), total_nr_store)
p = multiprocessing.Process(
target=url_loop,
args=(start_row, end_row, str(i), job_id_input))
procs.append(p)
p.start()
# *** Wait for all worker processes to finish
for p in procs:
p.join()
每个url_循环进程都会将自己的数据集写入数据库中的表中,因此我不必担心在python中将其连接在一起。在
但正如您所见,基本上这些特殊类型(Value&Array)支持进程之间的数据共享。
如果您转而寻找一个队列来执行类似循环的过程,那么可以使用JoinableQueue。
希望这有帮助!在