python访问redis的list队列出现大量进程TIME_WAIT状态,求大神解决!!!
问题背景:在redis中有一个list类型的对象,key——sha_list,里面python进程A负责向sha_list里面push内容,10个进程B从里面pop内容。如果B进程在pop时发现内容sha_list没有内容了,进程B就结束了。
出现的现象是:sha_list已经没有内容了,但是有一部分(不是全部)的进程B没有结束,查看进程网络状态,发现是TIME_WAIT状态。这些进程一直没有被结束。
为什么呢?为什么会有一部分进程处于TIME_WAIT状态呢?为什么客户段进程B被redis断开连接之后,会处于这个状态呢?什么原因导致的呢?
进程A代码:
def GetShaList(start_time, end_time, date):
pool = redis.ConnectionPool(host=HOST_IP, port=PORT, db=SHA_DB)
conn_obj = redis.StrictRedis(connection_pool=pool)
full_item = "%s|%s"%(start_time, end_time)
conn_obj.lpush("sha_list", full_item)
进程B代码:
def GetShaFromRedis():
pool = redis.ConnectionPool(host=HOST_IP, port=PORT, db=SHA_DB)
conn_obj = redis.StrictRedis(connection_pool=pool)
if conn_obj.llen("sha_list") <= 0:
return None, None
full_item = conn_obj.lpop("sha_list").split('|')
sha_str_key = full_item[0]
sha_date = full_item[1]
return sha_str_key, sha_date
if __name__ == "__main__":
sha_str_key, sha_date = GetShaFromRedis()
有大神遇到过这个问题吗?这个问题的根源到底在什么地方呢?