2023-04-02 18:17阅读: 460评论: 0推荐: 0

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

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

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

copy
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
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都可能不太好

本文作者:faf4r

本文链接:https://www.cnblogs.com/faf4r/p/17280956.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   faf4r  阅读(460)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起