如果我有一个包含以下代码的视图集:
class ExtraRouteViewset(viewsets.GenericViewSet):
@list_route(methods=['get'])
def somefunction(self, request):
return Response({
'key': 'value',
'reverse': reverse('extraroute-somefunction'),
})
@list_route(methods=['get'], url_path='arguments/(?P<thing>[^/]+)')
def arguments(self, request, thing):
return Response({
'key': thing,
'reverse': reverse('extraroute-arguments', kwargs={'thing': 'something'}),
})
Run Code Online (Sandbox Code Playgroud)
我希望这两种方法都有效.然而,第二个reverse提出了一个NoReverseMatch.检查网址格式(通过导航到不存在的网址)显示以下网址格式:
^demo/ ^ ^extraroute/arguments/(?P<thing>[^/]+)/$ [name='extraroute-arguments/(?P<thing>[^/]+)']
^demo/ ^ ^extraroute/arguments/(?P<thing>[^/]+)/\.(?P<format>[a-z0-9]+)$ [name='extraroute-arguments/(?P<thing>[^/]+)']
^demo/ ^ ^extraroute/somefunction/$ [name='extraroute-somefunction']
^demo/ ^ ^extraroute/somefunction/\.(?P<format>[a-z0-9]+)$ [name='extraroute-somefunction']
Run Code Online (Sandbox Code Playgroud)
视图名称似乎extraroute-arguments/(?P<thing>[^/]+)代替extraroute-arguments?事实上,如果我使用reverse('extraroute-arguments/(?P<thing>[^/]+)', kwargs={'thing': 'something'})它的话.我错过了一些非常明显的东西,或者这是一个错误django-rest-framework吗?
这是使用Django 1.8a和django-rest-framework 3.0.5.
如果我有
CompletableFuture<Something> future1 = service.request(param1);
CompletableFuture<Something> future2 = service.request(param2);
CompletableFuture<Void> many = CompletableFuture.allOf(future1, future2);
Run Code Online (Sandbox Code Playgroud)
我什么时候会发生什么many.cancel()?将future1和future2一并取消?如果没有,最简单的方法是什么?我不愿意留住future1和future2,只是为了能够取消他们时,我想取消many.
关于我为什么要这样做的一些背景:当接收一条数据时,我需要请求匹配的,可能未来的数据来执行计算.如果有更新的数据到达,我想取消先前计算的完成,因为结果将立即被新计算取代.
在itertools那里chain,它将多个生成器组合在一起,实质上是对它们进行深度优先迭代,即chain.from_iterable(['ABC', '123'])产生A,B,C,1,2,3.但是,没有广度优先版本,或者是我错过了什么?当然izip_longest,但是对于大量的发生器来说,这感觉很尴尬,因为元组会非常长并且可能非常稀疏.
我想出了以下内容:
def chain_bfs(*generators):
generators = list(generators)
while generators:
g = generators.pop(0)
try:
yield g.next()
except StopIteration:
pass
else:
generators.append(g)
Run Code Online (Sandbox Code Playgroud)
对我来说感觉有点冗长,是否有更多的Pythonic方法我错过了?这个功能是否适合加入itertools?