python有1000个url请求 放到queue 再十个线程 这样输出的数据是乱的 必须加锁么 10

有个问题我有1000个url(每个requests请求url执行的操作是一样的,请求以后有返回然后会调用函数再输出)放到queue然后十个线程这样输出的数据是乱的必须加锁... 有个问题 我有1000个url(每个requests请求url执行的操作是一样的,请求以后有返回 然后会调用函数 再输出) 放到queue 然后十个线程 这样输出的数据是乱的 必须加锁么?加锁不是一次就一个线程 不是又慢了啊 另外不是说queue有自带锁机制吗 展开
 我来答
从空去听8
推荐于2017-10-01 · TA获得超过7439个赞
知道大有可为答主
回答量:6907
采纳率:93%
帮助的人:5582万
展开全部
题主的问题表述不清,尤其十个线程做了哪些工作没说明,我从字面猜测,是把1000个url放在队列里,然后十个线程从队列中取出url,请求之后,调用输出函数。
先说队列的问题,通常的设计里,queue只在添加元素,摘取元素的时候内部加锁,以保证队列数据不出错,至于从queue中取出数据后怎么处理,要不要放临界区,queue是不管的,也不应该管,python的Queue模块提供了相应的Queue类。
再说输出结果是乱的,又是表述不清,如果你指的是最终输出到一个文件里,文件内容乱了,那给你4种解决办法:
1. 线程里每个url在请求到内容后,在写文件时设立临界区,保证串行输出,强烈不建议这种方式。
2. 对每个url的请求内容写一个文件,最后合并文件,这种最灵活。
3. 对每个工作线程的输出写一个文件,最后合并文件,最有并行style
4. 对每个url的请求内容再次写到一个队列里,另一个线程读取此队列写文件,最有设计模式style
如果你要保证输出结果是与输入url同序的,建议你采用上面第2种办法,合并文件的时候保证与url队列同序
千锋吧务
2016-05-04 · TA获得超过515个赞
知道小有建树答主
回答量:1009
采纳率:0%
帮助的人:223万
展开全部
可以使用多进程或多线程并发下载。其实你的方法已经是多进程的一种了。 python中有多进程模块multiprocessing和多线程multithreading。 思路是这样,将需要下载的连接送入队列,然后各个进程(或线程)从队列里拿任务然后下载。前面的两个类库都...3997
追问
我使用的是threading就是多线程啊,用这个不行?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式