Skip to content
This repository has been archived by the owner on Aug 5, 2020. It is now read-only.

Commit

Permalink
optimize memory usage via weakref.proxy()
Browse files Browse the repository at this point in the history
  • Loading branch information
youfou committed Mar 30, 2017
1 parent 0be4c05 commit 101c9ca
Show file tree
Hide file tree
Showing 10 changed files with 21 additions and 16 deletions.
2 changes: 1 addition & 1 deletion wxpy/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ def reply_my_friend(msg):
from .utils import dont_raise_response_error, embed, ensure_one, mutual_friends

__title__ = 'wxpy'
__version__ = '0.3.3'
__version__ = '0.3.4'
__author__ = 'Youfou'
__license__ = 'MIT'
__copyright__ = '2017, Youfou'
Expand Down
5 changes: 2 additions & 3 deletions wxpy/api/bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@
import itchat

from wxpy.api.chats import Chat, Chats, Friend, Group, MP, User
from wxpy.api.messages import Message, MessageConfig, Messages, Registered
from wxpy.api.messages import SYSTEM
from wxpy.api.messages import Message, MessageConfig, Messages, Registered, SYSTEM
from wxpy.utils import enhance_connection, ensure_list, get_user_name, handle_response, wrap_user_name

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -64,7 +63,7 @@ def __init__(
self.self = Friend(self.core.loginInfo['User'], self)
self.file_helper = Chat(wrap_user_name('filehelper'), self)

self.messages = Messages(bot=self)
self.messages = Messages()
self.registered = Registered(self)

self.is_listening = False
Expand Down
2 changes: 1 addition & 1 deletion wxpy/api/chats/chat.py
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ def get_avatar(self, save_path=None):
else:
raise TypeError('expected `Friend`, `Group` or `Member`, got`{}`'.format(type(self)))

kwargs.update(picDir=save_path)
kwargs.update(dict(picDir=save_path))

return self.bot.core.get_head_img(**kwargs)

Expand Down
6 changes: 4 additions & 2 deletions wxpy/api/chats/group.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,10 @@ def raw_member_list(update=False):
return self.raw.get('MemberList', list())

ret = Chats(source=self)
for raw in raw_member_list() or raw_member_list(True):
ret.append(Member(raw, self))
ret.extend(map(
lambda x: Member(x, self),
raw_member_list() or raw_member_list(True)
))
return ret

def __contains__(self, user):
Expand Down
3 changes: 2 additions & 1 deletion wxpy/api/chats/member.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from .user import User
import weakref


# Todo: 若尝试获取群成员信息时为空,自动更新成员信息 (并要照顾到遍历所有群成员的场景)
Expand All @@ -11,7 +12,7 @@ class Member(User):

def __init__(self, raw, group):
super(Member, self).__init__(raw, group.bot)
self.group = group
self.group = weakref.proxy(group)

@property
def display_name(self):
Expand Down
3 changes: 2 additions & 1 deletion wxpy/api/messages/message.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import html
import os
import tempfile
import weakref
from datetime import datetime
from xml.etree import ElementTree as ETree

Expand Down Expand Up @@ -39,7 +40,7 @@ class Message(object):
def __init__(self, raw, bot):
self.raw = raw

self.bot = bot
self.bot = weakref.proxy(bot)
self.type = self.raw.get('Type')

self.is_at = self.raw.get('IsAt') or self.raw.get('isAt')
Expand Down
3 changes: 2 additions & 1 deletion wxpy/api/messages/message_config.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import logging
import weakref

from wxpy.utils import ensure_list

Expand All @@ -15,7 +16,7 @@ def __init__(
chats, msg_types, except_self,
run_async, enabled
):
self.bot = bot
self.bot = weakref.proxy(bot)
self.func = func

self.chats = ensure_list(chats)
Expand Down
5 changes: 2 additions & 3 deletions wxpy/api/messages/messages.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,9 @@ class Messages(list):
多条消息的合集,可用于记录或搜索
"""

def __init__(self, msg_list=None, bot=None, max_history=None):
def __init__(self, msg_list=None, max_history=None):
if msg_list:
super(Messages, self).__init__(msg_list)
self.bot = bot
self.max_history = max_history

def append(self, msg):
Expand All @@ -33,4 +32,4 @@ def match(msg):
return
return True

return Messages(filter(match, self), bot=self.bot, max_history=self.max_history)
return Messages(filter(match, self), max_history=self.max_history)
4 changes: 3 additions & 1 deletion wxpy/api/messages/registered.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import weakref

from .message import SYSTEM


Expand All @@ -9,7 +11,7 @@ def __init__(self, bot):
:param bot: 所属的机器人
"""
super(Registered, self).__init__()
self.bot = bot
self.bot = weakref.proxy(bot)

def get_config(self, msg):
"""
Expand Down
4 changes: 2 additions & 2 deletions wxpy/utils/misc.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import inspect
import re
from functools import wraps

import weakref
from requests.adapters import HTTPAdapter

from wxpy.exceptions import ResponseError
Expand Down Expand Up @@ -48,7 +48,7 @@ def wrapped(*args, **kwargs):

from wxpy.api.bot import Bot
if isinstance(self, Bot):
bot = self
bot = weakref.proxy(self)
else:
bot = getattr(self, 'bot', None)
if not bot:
Expand Down

0 comments on commit 101c9ca

Please sign in to comment.