• 技术文章 >后端开发 >php教程

    python多线程任务分发的问题

    2016-12-01 00:56:56原创676
    我现在要多线程抓取一个网站内容,假设这个网站内容有105页,但是由于机器限制只能开启十个线程抓取,那么我如何做到第一个线程负责抓1-10页,第二个线程11-20页以此类推,直到最后第十个线程负责抓取91-105页,这个思路该怎么写成python代码啊?

    回复内容:

    我现在要多线程抓取一个网站内容,假设这个网站内容有105页,但是由于机器限制只能开启十个线程抓取,那么我如何做到第一个线程负责抓1-10页,第二个线程11-20页以此类推,直到最后第十个线程负责抓取91-105页,这个思路该怎么写成python代码啊?

    python3

    
    import urllib
    import queue
    import threading
    
    def download(queue,lck):
        """
        工作者,当队列中没有任务的时候就执行退出。
        """
        while not queue.empty():
            pg = queue.get()
            
            #在此写 抓取网页的代码
            #然后把抓到的内容写入文件
            
            lck.acquire()
            print ('第 %d 页已完成'%pg) 
            lck.release()
            queue.task_done()
    
    
    def main():
        """
        主线程, 
        """
        print ('开始下载……')
        lck = threading.Lock()
        q = queue.Queue()
        for pg in range(1,106): #网站内容有105页
            q.put(pg)
            
        for i in range(10):#十个线程
            t = threading.Thread(target=download, args=(q,lck))
            t.start()
        q.join()       # 等待所以任务完成
        print ('结束')
    
    if __name__ == '__main__':
        main()
    
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:c node.js java php python
    上一篇:PHP常量问题:const和define对比、求指教 下一篇:用laravel做单元测试的时候报错
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• 详细介绍PHP中时间处理类Carbon的用法• 分享一个neo4j(图形数据库)的PHP库!• 一文聊聊php5.4的特性【总结】• PHP商城那个好? 2022年十大开源PHP商城【分享】• PHP常量两种定义方法:define和const有什么区别
    1/1

    PHP中文网