V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  shadowmydx  ›  全部回复第 1 页 / 共 1 页
回复总数  3
@zong400 因为 urlib2 在构建 Request 对象时对你传入的参数进行了统一的处理,其中,处理 header 后,将其赋予一个成员变量 headers 。因此,你只需要重新替换掉这个成员就可以了。
这个很简单,这个 header 是 Request 对象中一个叫 headers 的成员,如果一定要大写,你直接这么写就可以:
h = {"Content-Type": "application/json"}
req = urllib2.Request(url, js, headers=h)
req.headers = h
print req.has_header("Content-Type")
print req.get_header("Content-Type")
Python 之所以引入 multiprocessing ,是因为 Python 有全局解释器锁,不能很好的发挥多 CPU 的计算能力。所以如果有 CPU 密集型的计算任务时,为了发挥多 CPU 的计算能力,就会把计算任务分发到不同的进程中完成。

问题在于,网络请求密集型的任务不属于 CPU 密集型而属于 I/O 阻塞型,这个时候,多 CPU 对于任务完成的加力并不明显,而进程的开销反而会拖累程序的效率。所以此时可以选用多线程的方案,来减少新建进程的开销和进程间通信的开销。

题外话,在没看到效率显著提升时,不妨线程开多点。
我 15 个线程跑一个任务,感觉龟速。开到 30 后就刷屏了。
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4766 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 11ms · UTC 09:29 · PVG 17:29 · LAX 01:29 · JFK 04:29
Developed with CodeLauncher
♥ Do have faith in what you're doing.