首页 > 编程语言 >Python 多线程死循环挂服务器时CPU占用过高问题

Python 多线程死循环挂服务器时CPU占用过高问题

时间:2023-04-02 18:35:54浏览次数:45  
标签:thread Python alive 死循环 线程 sleep 多线程 CPU

我的某个程序里有这样一段代码,把程序挂在服务器爬取信息,因此用到死循环,同时又需要进行三个任务,于是使用了多线程。

刚开始在死循环部分并没有加time.sleep(60),于是它一直在for循环,同时会进行.is_alive()(不确定这个消耗大不大),但总之这使得CPU占用过高。
而加上sleep之后,直接就降下去了(哭)

if __name__ == '__main__':
    ......

    jwc_t = threading.Thread(name='jwc', target=jwc.loop)
    xg_t = threading.Thread(name='xg', target=xg.loop)
    pec_t = threading.Thread(name='pec', target=pec.loop)

    threads = [jwc_t, xg_t, pec_t]
    for thread in threads:
        thread.daemon = True
        thread.start()
    
    # 控制程序退出,有这个就能检测Ctrl+C了
    """
    多线程并不能接受到发送给主线程的Ctrl+C,而主线程结束子线程并不会解锁
    所以将子线程设置为守护线程,这样主线程结束守护线程也会解锁
    故为了让主线程可以被控制,就要加个while 循环等待接收信号
    (注释掉下面内容程序秒停)
    """
    # 可能是工程上的一般写法,要关注到子线程的存活
    while True:
        alive = True
        for thread in threads:
            alive = alive and thread.is_alive()
        time.sleep(60)  # 加sleep以减少CPU消耗
        if not alive:
            break

    # # 对该项目更简单写法
    # while True:
    #     # pass  # 不好,CPU占用更高
    #     time.sleep(60)

想说的就是代码里注释写的,尽量用time.sleep()来死循环,甚至pass都可能不太好

标签:thread,Python,alive,死循环,线程,sleep,多线程,CPU
From: https://www.cnblogs.com/faf4r/p/17280956.html

相关文章

  • Python 文件与路径操作
    路径表示绝对路径:绝对路径是指从盘符开始的文件全路径,一般表现为“/”。如“C:/Users/TheUser/Desktop/temp.txt”(Windows)、“/Users/TheUser/Desktop/temp.txt”(Windows)、“/home/TheUser/temp.txt”(Linux)。相对路径:相对路径是指从本文件开始算起的文件路径,总体长......
  • python系列教程208——为什么使用lambda
    声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写,所以不如我的AI技术教学风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值......
  • Python基础之pyautogui模块(详细总结鼠标键盘操作)
    来源:https://zhuanlan.zhihu.com/p/471275277仅用于个人学习(以防自己忘记)1.GUI控制功能控制鼠标键盘使用的模块为:pyautogui,这个模块操作起鼠标键盘的时候,非常的迅速,而且如果该模块控制了鼠标后,程序比较难关闭,这时我们有两个方法专门针对以上的情况:1.1自动防故障功能 ......
  • 用OpenCv-Python自带的LBPH识别器实现简单人脸识别(上)
    用OpenCv-Python自带的LBPH识别器实现简单人脸识别(上)引言:本文开发环境为:Windows10+phchram+Anaconda5.2(Python3.6)+Opencv4.5.5,用opencv-contrib原生的API完成了人脸识别的功能,其可以任意添加人脸ID数据,但其效果比较差(勉强能用),如果日后有时间的话,给大家出一期(挖坑)利......
  • 用OpenCv-Python自带的LBPH识别器实现简单人脸识别(下)
    介绍本文附录了通过LBPH实现简单人脸识别的源代码,分类效果并不是很好,供个人学习使用。人脸录入.pyimportcv2cap=cv2.VideoCapture(0)flag=1num=0while(cap.isOpened()):ret_flag,Vshow=cap.read()cv2.imshow("Capture_Test",Vshow)k=cv2.w......
  • javascript VS python 变量作用域
    js中函数内部默认是可以读取到外部声明的变量,python不可以,必须使用关键字globalglobal必须在函数内部使用,用以内化函数外部变量。在函数外部是无法声明全局变量的,或者说所谓的全局变量在函数内部是不好使的,这还叫什么全局变量?应该叫局外变量。而global是内部跟局外变量建立一种......
  • 孤狼老师-接口测试自动化(Python版完整版)-日志记录&测试报告
            此时,由于每次执行方法前,都会执行一遍setup,故每次都要初始化一次LoggerHelper方法,每次都会加载一次配置文件,优化LoggerHelper:        针对多个接口用例,使用如下方式:   ......
  • Python使用rtlsdr
    1.打开命令行  也可以在Spyder中的控制台中2.安装rtlsdrpipinstallpyrtlsdr3.下载驱动动态库https://ftp.osmocom.org/binaries/windows/rtl-sdr/因为python是64位的,所以驱动也要下载64位的 下载最新的即可4.这三个就是我们需要的驱动  5.将三个驱动复制......
  • 【Linux Centos】如何卸载自带的python和yum以及卸载后如何重新安装yum
    【LinuxCentos】如何卸载自带的python和yum以及卸载后如何重新安装yum注意如果不是必要情况,请不要卸载服务器自带的python,因为yum等命令都会用到python库,卸载以后可能造成不良后果。如果只是觉得系统python版本不合适,想安装新版本,建议安装anaconda或miniconda,在不同的环境中使......
  • 《程序是怎样跑起来的》读书笔记1——对程序员来说CPU是什么
    一丶什么是程序程序是指令和数组的组合体,如:print("你好世界"),其中print是指令,你好世界是数据。CPU能直接识别和执行的只有机器语言,使用C,java这种高级语言编写的程序需要编译转换后才可以运行。二丶CPU的内部结构CPU即中央处理器,相当于计算机的大脑,内部由许多晶体管构成,负责解......