socket 多线程运行报错,大佬们帮帮看下

2018-04-24 10:52:12 +08:00
 wjx1993

背景:同时开了几千个线程,运行到 300 多个线程的时间报错了, socket.setdefaulttimeout(45) sleep_download_time = 1 time.sleep(sleep_download_time) 超时和延时都有加上

1、ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。 这个我认为是被服务器拒绝了,被发是爬虫了?

2、socket.timeout: timed out 这个我已经设置了超时的时间,还是报错了

4096 次点击
所在节点    Python
32 条回复
WordTian
2018-04-24 12:36:48 +08:00
你一个 ip 整上千个并发连接,你不被拦谁被拦
wjx1993
2018-04-24 12:45:58 +08:00
@WordTian socket 应该怎么切换代理
WordTian
2018-04-24 16:20:25 +08:00
用 squid 吧
WordTian
2018-04-24 16:22:31 +08:00
@WordTian 噢,刚发现 squid 主要是 HTTP 代理,socket 的我还真不知道
defphilip
2018-04-24 19:46:51 +08:00
开几千个线程的爬虫。。。。系统吃的消吗
真的想用多线程,开个线程池几个线程并发跑就好了
wjx1993
2018-04-24 21:37:39 +08:00
@defphilip 还好吧,只是跑到 300 多就被服务器拒绝了,线程池总是有点问题,调了好长时间,话说线程池就不会报错被服务器拒绝了吗?
wjx1993
2018-04-25 14:36:40 +08:00
@defphilip 线程池要怎么写?大佬有例子介绍一下吗?😂
wjx1993
2018-04-25 15:13:42 +08:00
沉了吗
ai277014717
2018-04-25 15:38:27 +08:00
@wjx1993 参考前面说的你想办法爬慢点就能解决了。并发控制到 300 以下试试。
线程池我觉的可有可无,主要是写了可以减少开销。
wjx1993
2018-04-25 15:44:56 +08:00
@ai277014717 不能爬太慢,需求就是要同时并发好几千,所以暂时只想到用线程池,但是自己写的线程池总是有问题,跑不起来所以请教一下线程池的写法,最好有个例子最好了,多谢啦!
hcnhcn012
2018-04-25 15:58:05 +08:00
concurrent.futures.ThreadPoolExecutor 了解一下
wjx1993
2018-04-25 17:14:58 +08:00
@hcnhcn012 好的,多谢!不过我又分析了一下自己的需求,发现目前用不了多进程,只能多线程了,不过会被服务器拒绝,请问有比较好的 socket 代理吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/449350

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX