Tag Archives: bigworld Mailbox property is not available in background threads

语法糖,来得更猛烈些才好.

29岁想换行 http://www.cocoachina.com/bbs/read.php?tid=110794&page=5
我留了言, “专才有行市.
全世界就你一人会.你就牛掰了. 如果你会的东西,随便谁都能3个月速成的话,就值得思考了.”
其实又何尝不是写给我自己的呢. 今天写了一个函数,我觉得自己还算有那么一点点灵气.但这种闪光点估计只有识货的才有感觉. 我会努力来回忆一些类似的case,分享给大家.
长话短说:这个问题来源于最近的工作. 一个基于bw的rpc framework. 然而mailbox是不可以在后台线程里被调用的. 这种情况是因为 基于socket的数据包处理函数会调用实体的函数. 而恰恰socket的主循环是thread的.
比如: onHandleLogin(packet): accEntity.doLogin() .而以前在bw里面的脚本是没问题的.
我忍了很久以后花了5分钟, 把10年写的一个函数改了改. 变成了一个优雅的修饰.
然后上面的函数就改成了
@AsynCall
def onHandler ….
具体如下:
def AsynCall( function ):
“””
create timer to call function. avoid error:”AttributeError: Mailbox property is not available in background threads ”
by cnsoft 2012-07-31
“””
def checkIfLimited( self, *args, **kwargs ):
#assert isinstance( self, BigWorld.Base )
#if not self.checkCoolDown(str(function.__name__),cdT):
# return function( self, *args, **kwargs )
#else:
# pass
def [...]