Python爬虫学习笔记(2):多线程入门

引言:Python爬虫的爬取过程中可以利用多线程来提高爬取效率,通过调节线程时间降低爬取失败的风险。


共同编写者:OOFFrankDura


首先介绍两个方法的区别:

1.setDaemon():

设置守护线程:线程结束时候子线程无论是否执行完都要结束!

       setDaemon()方法。主线程A中,创建了子线程B,并且在主线程A中调用了B.setDaemon(),这个的意思是,把主线程A设置为守护线程,这时候,要是主线程A执行结束了,就不管子线程B是否完成,一并和主线程A退出.这就是setDaemon方法的含义,这基本和join是相反的。此外,还有个要特别注意的:必须在start() 方法调用之前设置,如果不设置为守护线程,
程序会被无限挂起。注意推出和挂起不一样。

示例代码:

import threading
import time
class MyThread(threading.Thread):
    def __init__(self, id):
        threading.Thread.__init__(self)

    def run(self):
        time.sleep(5)
        print "This is " + self.getName()
if __name__ == "__main__":
    t1 = MyThread(999)
    t1.setDaemon(True)    #这里打印出"I am the father thread."就结束了。子线程连同父线程被一同关闭!
    t1.start()
    print "I am the father thread."

2.
join():

保证此线程执行完之后再去执行下一个线程或者主线程

示例代码:

# -*- coding: utf-8 -*-
import threading
import time
class MyThread(threading.Thread):
    def __init__(self, id):
        threading.Thread.__init__(self)
        self.id = id

    def run(self):
        x = 0
        time.sleep(10)
        print self.id
if __name__ == "__main__":
    t1 = MyThread(999)
    t2 = MyThread(11)
    t1.start()
    t1.join()
    t2.start()
    t2.join()
    # t1.join()   #如果没有join()  先打印 12345 再去打印我们所定义的线程t1   id
                  #如果有join()就在主线程中等待子线程 t1 执行完毕之后在去继续执行主线程
    # 方法:主线程A中,创建了子线程B,并且在主线程A中调用了B.join(),
    # 那么,主线程A会在调用的地方等待,直到子线程B完成操作后,才可以接
    # 着往下执行,那么在调用这个线程时可以使用被调用线程的join方法


然后自定义一个线程,在run()方法中编写爬虫即可


伪代码如下:

# -*- coding: UTF-8 -*-
import threading
import time
class testThread (threading.Thread):  
 #继承父类threading.Thread
 

 #构造器

    def __init__(self,url):
        threading.Thread.__init__(self) 
        self.url = url
    def run(self): 
            time.sleep(5)
            function(url)  #爬虫
if __name__ == "__main__":
    urlcon = [url1,url2,...]
    parserThread = []
    for i  in urlcon:
        t = testThread(i)
        parserThread.append(t)
    for i in parserThread:
        i.start()
        i.join()



 #把要执行的代码(假设是function()函数执行具体爬虫的功能)写到run函数里面 线程在创建后会直接运行run函数#也就是说 start()方法后运行的是run方法



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值