如何在python多线程join挂起后还能在主线程优雅的stop各个线程

yitian_to_yitian 2016-02-20 10:26:12
因为在开发一个多线程请求客户接口的server,这个请求内部会按照客户接口的间隔时间要求进行相应的sleep, 当规定的读取配置的时间到了后(比如10分钟),线程会统一退出,主线程会通过join等待所有的线程全部退出后才重新读取配置。因为服务开始运行后,线程就会进行相应的join挂起,这个时候如果想stop进程的话,整个进程要等待所有线程退出后才会stop。之前通过模拟join的方式达到功能要求,但因为太耗费cpu,而改为原生的join实现功能,但重起一次serer就得等到所有线程退出才能开始重启。求python牛人好的思路解决,感谢


主要代码段如下:
adConfigs = [] //为每个客户的接口配置列表
for adConfig in adConfigs:
req = Requester(self.cfg, adConfig, init_load_config_time)
req.start()
self.threadList.append(req)

//原生join实现同步线程
for t in self.threadList:
t.join()
"""
# 自定义同步线程方法
while True:
alive = False
for t in self.threadList:
alive = alive or t.isAlive()
if not alive:
break
"""
...全文
342 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
panghuhu250 2016-02-21
  • 打赏
  • 举报
回复
调用join()后, 控制权就完全交出去了, 只有等到join()返回. "自定义的join"cpu占用率高, 可以在循环中sleep一下, 哪怕是sleep(0.1), cpu占用率就下降到0%了.

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧