首页 > 编程语言 > python :控制线程上限,防止无限开启线程

python :控制线程上限,防止无限开启线程

时间:2022-12-09 22:00:40浏览次数:39  
标签:chapter log neirong3 python url lst 线程 控制线 sem

import threading
sem = threading.Semaphore(10)#设置最大线程数
#在线程调用的函数开始设置sem.acquire()
#在线程调用的函数最后设置sem.release()
def xiazai(iiv,chapter_url_list):
    sem.acquire()
    file_name = bt1+str(iiv)+'.txt'
    with open(file_name, 'w', encoding='utf-8') as f:
        print("the time is : %s" % datetime.now())
        for index, chapter_url in enumerate(chapter_url_list,start=1):
            while 1:
                try:
                    item = get_chapter_detail(chapter_url)
                    break
                except:
                    time.sleep(2)
            f.write(''+item['title']+'\n')
            #f.write('原文链接: '+item['url']+'\n')
            neirong1=item['content'].replace(' ','').replace("ps:投票了兄弟们!","").replace('    ','')
            neirong2=neirong1.replace("亲,点击进去,给个好评呗,分数越高更新越快,据说给香书小说打满分的最后都找到了漂亮的老婆哦!手机站全新改版升级地址:https://wap.ibiquge.la,数据和书签与电脑站同步,无广告清新阅读!","")
            try:
                neirong3=neirong2.split('ps')[0]
            except:
                neirong3=neirong2
            try:
                neirong3=neirong3.split('PS')[0]
            except:
                neirong3=neirong3
            f.write(''+neirong3+'\n')
            #sys.stdout.write(f'进度:{index}/{len(chapter_url_list)}\r')
        print('生成文件:',file_name)
    sem.release()

#如果各线程处理同名的文件,为了防止冲突
#在开始修改指定文件时设置:lock.acquire(),修改完成后设置:lock.release
lock = threading.Lock()
def handler(fid, fpath, is_file):
    if is_file:
        lock.acquire()
        complete_files.append(fpath)
        with open('complete.log', mode='r', encoding='UTF-8') as (log):
            log_lst = log.readlines()
            log_lst_fmt = []
            for c in log_lst:
                log_lst_fmt.append(c.rstrip('\n'))

        with open('complete.log', mode='a', encoding='UTF-8') as (log):
            if fpath not in log_lst_fmt:
                log.write('{}\n'.format(fpath))
        lock.release()

 

标签:chapter,log,neirong3,python,url,lst,线程,控制线,sem
From: https://www.cnblogs.com/xkdn/p/16970104.html

相关文章

  • [附源码]Python计算机毕业设计Django网文论坛管理系统
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • 【Python】画一个圣诞树
    importturtleast#as就是取个别名,后续调用的t都是turtlefromturtleimport*importrandomasrimporttimen=100.0speed("fastest")#定义速度screensi......
  • python语法中的左值、右值和字符
    位置决定语义在下面的python代码中,忽略掉语法错误,源码中同样一个单词tsecer在不同的位置有不同的意义import之后在import之后的tsecer是作为一个简单的字面字符串来处......
  • 多线程练习
    Map<String,Integer>totalStock=newHashMap<>();AtomicIntegertotal=newAtomicInteger();privateList<Car>carList=newArrayList<>();publ......
  • cpu放弃线程的时机
    ......
  • python基础-常用内置包
      内置包是python自带的一些功能模块,有需求时可以在自己文件中直接导入使用。 1.datetime包  python中的时间包,可以在业务开发中辅助我们处理时间信息;#datetime......
  • 教你用Python实现抽奖式随机提问
    案例介绍欢迎来的我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用Python编程实战案例,做一个简易的随机提问器。随机提问器主要实现随机,乱序,提取的功能。通过实战我......
  • python初步了解队列
    python初步了解队列队列是一种先入先出的数据结构单纯用列表来实现队列运用pop()函数,进行出队效率很低,因为在列表开头删除元素需要将其他元素往前移动一位.所以一般用......
  • python初步了解链表
    python数据结构——链表链表由一个个节点组成,每个节点包含自己的存储数据和下一个节点。单链表简单实现先创造一个类来表示节点与节点之间的关系classNode:def......
  • python初步了解栈
    python初步了解栈栈栈是一种后入先出的数据结构。python用列表实现堆栈非常容易,使用append函数,即可实现堆栈,pop()函数即可实现从栈顶取出元素。stack=[3,4,5]stac......