socket 多线程运行报错,大佬们帮帮看下 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
wjx1993
V2EX    Python

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

  •  
  •   wjx1993 2018-04-24 10:52:12 +08:00 4767 次点击
    这是一个创建于 2781 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    32 条回复    2018-04-25 17:14:58 +08:00
    wjx1993
        1
    wjx1993  
    OP
       2018-04-24 11:13:02 +08:00 via Android
    求大佬们帮忙看看,跪求
    ai277014717
        2
    ai277014717  
       2018-04-24 11:20:29 +08:00
    为什么要开着么多线程?是没试过最多可以开多少个线程?
    Hyponet
        3
    Hyponet  
       2018-04-24 11:26:03 +08:00
    几千个线程去爬,可能不是发现是爬虫了,是发现被 D 了。。。。
    wjx1993
        4
    wjx1993  
    OP
       2018-04-24 11:27:51 +08:00 via Android
    @HypoChen 怎么解决这个问题
    wjx1993
        5
    wjx1993  
    OP
       2018-04-24 11:28:44 +08:00 via Android
    @ai277014717 多线程效率高啊!怎么解决这个问题·_·?一个线程跑正常
    goofool
        6
    goofool  
       2018-04-24 11:30:00 +08:00
    每个线程一个代理吗?
    wjx1993
        7
    wjx1993  
    OP
       2018-04-24 11:32:04 +08:00 via Android
    @goofool 没有用代理,这个还要代理?
    A555
        8
    A555  
       2018-04-24 11:33:46 +08:00
    @wjx1993 你这样去请求别人 把你 ip 封了
    wjx1993
        9
    wjx1993  
    OP
       2018-04-24 11:36:18 +08:00 via Android
    @A555 应该不是封 ip,我重新运行后还是可以跑的,每次重新跑都是大概跑到 300 多线程就保存了
    onepunch
        10
    onepunch  
       2018-04-24 11:40:46 +08:00
    你把 sleep 设置的时间长一点
    wjx1993
        11
    wjx1993  
    OP
       2018-04-24 11:45:57 +08:00 via Android
    @onepunch 时间设置太久就没意义了,要跑的内容太多了,好几千个线程要等到什么时候?
    darylc
        12
    darylc  
       2018-04-24 11:48:24 +08:00
    线程多就一定快?想多了
    ai277014717
        13
    ai277014717  
       2018-04-24 11:50:49 +08:00
    @wjx1993 多线程效率不一定高。nodejs 还是单线程呢。看看磁盘内存 CPU 有没有瓶颈吧。还要考虑到网站服务器的承受能力,有的服务器可能还没个人 pc 的配置高呢。
    ericls
        14
    ericls  
       2018-04-24 11:55:06 +08:00 via iPhone
    爬虫的精髓在于怎么慢 而不是怎么快
    changnet
        15
    changnet  
       2018-04-24 12:04:44 +08:00 via Android
    我一直不理解开很多线程的代码逻辑,尤其有些库在测试性能时还开了几百个,难不成大家的 cpu 都是几百上千核的,或者是逻辑都是阻塞写法。开了那么多线程,我的其他逻辑还要不要跑了,三五个线程差不多了。
    wjx1993
        16
    wjx1993  
    OP
       2018-04-24 12:20:31 +08:00 via Android
    @changnet 一般上限是 3 万多,但是这个是可以设置的,这个要看你怎么写了
    linyinma
        17
    linyinma  
       2018-04-24 12:20:37 +08:00
    @wjx1993
    从你的描述很显然啊,远程服务器设置了瞬时并发数啊(如 nginx 添加 nginx_http_limit_conn_module )来限制同一个 ip 来源的连接数,防止恶意攻击访问)
    wjx1993
        18
    wjx1993  
    OP
       2018-04-24 12:22:10 +08:00 via Android
    @susecjh 不是说一定快,我是说要爬的内容必须要同时运行,所以才用了多线程
    wjx1993
        19
    wjx1993  
    OP
       2018-04-24 12:22:56 +08:00 via Android
    @ericls 太慢的话,还没爬完,数据就没了
    wjx1993
        20
    wjx1993  
    OP
       2018-04-24 12:24:43 +08:00 via Android
    @linyinma 是不是只有用 ip 代理才可以解决? 那我要怎么设置切换 ip ?
    WordTian
        21
    WordTian  
       2018-04-24 12:36:48 +08:00 via Android
    你一个 ip 整上千个并发连接,你不被拦谁被拦
    wjx1993
        22
    wjx1993  
    OP
       2018-04-24 12:45:58 +08:00 via Android
    @WordTian socket 应该怎么切换代理
    WordTian
        23
    WordTian  
       2018-04-24 16:20:25 +08:00 via Android
    用 squid 吧
    WordTian
        24
    WordTian  
       2018-04-24 16:22:31 +08:00 via Android
    @WordTian 噢,刚发现 squid 主要是 HTTP 代理,socket 的我还真不知道
    defphilip
        25
    defphilip  
       2018-04-24 19:46:51 +08:00
    开几千个线程的爬虫。。。。系统吃的消吗
    真的想用多线程,开个线程池几个线程并发跑就好了
    wjx1993
        26
    wjx1993  
    OP
       2018-04-24 21:37:39 +08:00 via Android
    @defphilip 还好吧,只是跑到 300 多就被服务器拒绝了,线程池总是有点问题,调了好长时间,话说线程池就不会报错被服务器拒绝了吗?
    wjx1993
        27
    wjx1993  
    OP
       2018-04-25 14:36:40 +08:00 via Android
    @defphilip 线程池要怎么写?大佬有例子介绍一下吗?
    wjx1993
        28
    wjx1993  
    OP
       2018-04-25 15:13:42 +08:00 via Android
    沉了吗
    ai277014717
        29
    ai277014717  
       2018-04-25 15:38:27 +08:00
    @wjx1993 参考前面说的你想办法爬慢点就能解决了。并发控制到 300 以下试试。
    线程池我觉的可有可无,主要是写了可以减少开销。
    wjx1993
        30
    wjx1993  
    OP
       2018-04-25 15:44:56 +08:00 via Android
    @ai277014717 不能爬太慢,需求就是要同时并发好几千,所以暂时只想到用线程池,但是自己写的线程池总是有问题,跑不起来所以请教一下线程池的写法,最好有个例子最好了,多谢啦!
    hcnhcn012
        31
    hcnhcn012  
       2018-04-25 15:58:05 +08:00 via iPhone
    concurrent.futures.ThreadPoolExecutor 了解一下
    wjx1993
        32
    wjx1993  
    OP
       2018-04-25 17:14:58 +08:00 via Android
    @hcnhcn012 好的,多谢!不过我又分析了一下自己的需求,发现目前用不了多进程,只能多线程了,不过会被服务器拒绝,请问有比较好的 socket 代理吗?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1312 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 17:15 PVG 01:15 LAX 09:15 JFK 12:15
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86