Python 多线程死循环挂服务器时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都可能不太好

posted @ 2023-04-02 18:17  faf4r  阅读(445)  评论(0编辑  收藏  举报