python中的线程并不是并行发生的
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python中的线程并不是并行发生的,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1288字,纯文字阅读大概需要2分钟。
内容图文
![python中的线程并不是并行发生的](/upload/InfoBanner/zyjiaocheng/710/6ab6bf7600a14f70a41465b51c8b3084.jpg)
我正在使用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分钟.
解决方法:
要同时获取多个url,限制为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,
内容总结
以上是互联网集市为您收集整理的python中的线程并不是并行发生的全部内容,希望文章能够帮你解决python中的线程并不是并行发生的所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。