按优先级和时间顺序对稍后执行的函数进行排队。
cs.later的Python项目详细描述
按优先级和时间顺序对稍后执行的函数进行排队。
我使用后面的对象方便地对 执行将在稍后按优先级顺序执行,并带有容量限制。
为什么不是期货? 在未来出现之前我就已经有了这个, 我更喜欢它的命名方案和接口, 而期货似乎并不支持优先执行。
使用非常简单:创建一个稍后的实例,通常是队列 使用.defer()方法的函数:
L = Later(4) # a Later with a parallelism of 4
...
LF = L.defer(func, *args, **kwargs)
...
x = LF() # collect result
.defer方法及其同级返回一个lateFunction, 它是cs.result.result的一个子类。 因此它是可调用的,所以要收集结果,只需调用lateFunction。
函数defer(func, *a, **kw)
稍后使用当前默认值对函数进行排队。 返回lateFunction。
类LateFunction
mro:cs.result.Result
有关挂起函数的状态信息。
LateFunction是可调用的,因此可以这样执行同步调用:
def func():
return 3
L = Later(4)
LF = L.defer()
x = LF()
print(x) # prints 3
这样,如果调用的函数引发异常,则它是可见的:
LF = L.defer()
try:
x = LF()
except SomeException as e:
# handle the exception ...
避免使用try/except.wait()处理异常 应使用方法:
LF = L.defer()
x, exc_info = LF.wait()
if exc_info:
# handle exception
exc_type, exc_value, exc_traceback = exc_info
...
else:
# use `x`, the function result
待办事项:.cancel(),等待超时()。
类LatePool
subprocess.pool样式之后的上下文管理器 但延迟完成。
示例用法:
L = Later(4) # a 4 thread Later
with LatePool(L) as LP:
# several calls to LatePool.defer, perhaps looped
LP.defer(func, *args, **kwargs)
LP.defer(func, *args, **kwargs)
# now we can LP.join() to block for all LateFunctions
#
# or iterate over LP to collect LateFunctions as they complete
for LF in LP:
result = LF()
print(result)
类Later
将函数调用排队以供以后执行的管理类。
提供方法以提交要尽快运行的函数或 在延迟或其他挂起的函数之后。这些方法 返回LateFunctions,cs.result.result的一个子类。
后面的实例的close方法关闭后面的 提交。 关闭并不意味着所有提交的函数 已完成,甚至已发送。 调用方可以等待完成,也可以选择取消函数。
todo:^ {STR 1 } $ Enter < /强>返回子节点,^ {STR 1 } $退出<强>关闭子节点。
待办事项:稍后删除全局默认值。
函数retry(retry_interval, func, *a, **kw)
使用提供的参数调用可调用的func
。
如果它引发retryerror,则休眠(retry_interval
)并调用
再次,直到它没有引发retryerror。
类RetryError
mro:builtins.Exception
,builtins.BaseException
应重新提交到队列的函数引发的异常。
类SubLater
一个使用现有的{{CD5>}管理延迟任务组的类。