python中的线程不会并行发生
我正在使用urllib2进行数据抓取调用,但是每个调用大约需要1秒钟才能完成。我正在尝试测试是否可以将URL调用循环多线程化为具有不同偏移量的线程。
我现在使用update_items()方法执行此操作,其中第一个和第二个参数是循环的偏移量和限制:
import threading
t1 = threading.Thread(target=trade.update_items(1, 100))
t2 = threading.Thread(target=trade.update_items(101, 200))
t3 = threading.Thread(target=trade.update_items(201, 300))
t1.start()
t2.start()
t3.start()
#t1.join()
#t2.join()
#t3.join()
像代码一样,我试图对join()进行注释,以防止线程等待,但是看来我对这个库的想法是错误的。我将print()函数插入了update_items()方法中,很有趣,它表明它仍在串行例程中循环,而不是像我想要的那样在所有3个线程中并行循环。
我的正常抓取协议大约需要5个小时才能完成,并且数据量很小,但是HTTP调用总是需要一些时间。我想对该任务执行至少几次多线程处理,以将获取时间至少缩短到30-45分钟左右。
-
要并行获取多个网址,一次最多限制20个连接:
import urllib2 from multiprocessing.dummy import Pool def generate_urls(): # generate some dummy urls for i in range(100): yield 'http://example.com?param=%d' % i def get_url(url): try: return url, urllib2.urlopen(url).read(), None except EnvironmentError as e: return url, None, e pool = Pool(20) # limit number of concurrent connections for url, result, error in pool.imap_unordered(get_url, generate_urls()): if error is None: print result,