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 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结