我在使用Django和频道时遇到问题(在asgi模式下) 当我设置Django频道并使用asgi模式时,我的应用会为每个http请求和我从频道发送的每条消息创建一个新线程
例如,假设我的应用程序是一个简单的回声聊天服务器 当我运行服务器并请求以客户端身份连接到套接字时,线程数增加,并且当我再次向套接字发送消息时,每条消息的线程数都会增加。
你知道为什么吗?如何解决或限制它?
答案 0 :(得分:0)
对于同步请求,Channels创建一个ThreadPool。如果它在事件循环中运行HTTP请求,则每个数据库查询和缓存命中都会锁定事件循环。
如果未设置环境变量function getHoursFormat( $given ){
$hours = ( $given > 86399 ) ? '0'.floor( ( $given / 86400 ) * 24 )-gmdate( "H", $given ) : gmdate("H", $given );
$min = gmdate( "i", $given );
$sec = gmdate( "s", $given );
$formatted_string = $hours.':'.$min.':'.$sec;
return $formatted_string;
}
,则使用默认设置ASGI_THREADS
,该默认值IMO太高,因为它是CPU内核数乘以5的值。将ASGI_THREADS设置为较低的值编号并使用多个达芙妮工艺。通过使用较少数量的线程和多个进程,可以避免因Python的全局解释器锁定而导致的某些速度下降。