python中startout是什么意思_Python中的Timeout函数

import multiprocessing as MP

from sys import exc_info

from time import clock

DEFAULT_TIMEOUT = 60

################################################################################

def timeout(limit=None):

if limit is None:

limit = DEFAULT_TIMEOUT

if limit <= 0:

raise ValueError()

def wrapper(function):

return _Timeout(function, limit)

return wrapper

class TimeoutError(Exception): pass

################################################################################

def _target(queue, function, *args, **kwargs):

try:

queue.put((True, function(*args, **kwargs)))

except:

queue.put((False, exc_info()[1]))

class _Timeout:

def __init__(self, function, limit):

self.__limit = limit

self.__function = function

self.__timeout = clock()

self.__process = MP.Process()

self.__queue = MP.Queue()

def __call__(self, *args, **kwargs):

self.cancel()

self.__queue = MP.Queue(1)

args = (self.__queue, self.__function) + args

self.__process = MP.Process(target=_target, args=args, kwargs=kwargs)

self.__process.daemon = True

self.__process.start()

self.__timeout = self.__limit + clock()

def cancel(self):

if self.__process.is_alive():

self.__process.terminate()

@property

def ready(self):

if self.__queue.full():

return True

elif not self.__queue.empty():

return True

elif self.__timeout < clock():

self.cancel()

else:

return False

@property

def value(self):

if self.ready is True:

flag, load = self.__queue.get()

if flag:

return load

raise load

raise TimeoutError()

def __get_limit(self):

return self.__limit

def __set_limit(self, value):

if value <= 0:

raise ValueError()

self.__limit = value

limit = property(__get_limit, __set_limit)

它可能是Python2.x,但转换起来应该不难。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值