xfgryujk / blivedm

获取bilibili直播弹幕,使用WebSocket协议,支持web端和B站直播开放平台两种接口
MIT License
1.05k stars 225 forks source link

代码重构后线程使用数飙升 #22

Closed AFatOtaku closed 2 years ago

AFatOtaku commented 2 years ago

在使用了重构后的代码后发现,每秒处理新消息时都新建了一个线程,并所有线程都没有关闭。这就导致了并发情况下会使得线程使用量大量上升,运行久了甚至会使服务器线程占满

AFatOtaku commented 2 years ago

另外这个能不能,在同时获取直播间弹幕的过程中,对获取的直播间进行灵活的开启/结束
比如获取5个直播间 X秒后关闭随机直播间 X秒后再开启一个随机直播间
这种感觉

xfgryujk commented 2 years ago

使用了线程池,不关闭线程是正常的。默认最大线程数是比CPU数大一点,你可以自己设置 https://docs.python.org/3/library/asyncio-eventloop.html#asyncio.loop.set_default_executor

另外这个能不能,在同时获取直播间弹幕的过程中,对获取的直播间进行灵活的开启/结束 比如获取5个直播间 X秒后关闭随机直播间 X秒后再开启一个随机直播间 这种感觉

动态开启、关闭房间在sample里有演示

AFatOtaku commented 2 years ago

sample里那个不知道是我用法不对还是怎么样,只能5个同开同关。 我想做到的时读数据库看到谁开播了,就开启对谁的弹幕获取。然后谁下播了就关闭对谁的弹幕获取。 现在的做法是用的开一个threading来开启asyncio获取,但这样强制关闭threading后,异步线程没有被关闭。 谢谢回复,我之后再研究一下好了。

xfgryujk commented 2 years ago

client.start()之后主协程可以不await,去干别的事

AFatOtaku commented 2 years ago

好的,我再研究一下,感谢