我目前正在尝试使用类似于生成器的行为来允许快速上下文切换和并发,而没有多进程的开销和复杂性,这很好地工作但是我试图找到一种方法让这些迭代器在引发异常后恢复.
据我所知,技术上不可能在发生异常后恢复生成器,如下所示:
def test():
yield 1
raise KeyboardInterrupt
yield 2
a = test()
for x in range(2):
try:
print('Trying next...')
print(next(a))
except:
pass
Run Code Online (Sandbox Code Playgroud)
结果是:
Trying next...
1
Trying next...
Run Code Online (Sandbox Code Playgroud)
从未达到第二次收益.这是预期的行为.
我正在寻找的,希望有人有办法,将允许运行这样的生成器,在生成器之外处理异常,然后让生成器保留旧的上下文(可能由异常处理修改)代码)然后继续执行.
目前我有以下设置:
class base:
def __iter__(self):
self._run = self.main()
return self
def __next__(self,_run=None):
try:
return next(self._run)
except tuple(self.exceptions.keys()) as e: # if exception handler exists, use it
exception = e.__class__
self._run = self._end() # end thread if the handler also fails
handler = self.__next__(self.exceptions[exception])
if handler: # if …
Run Code Online (Sandbox Code Playgroud) 我希望在每次加载管理界面的页面时都运行一个 python 函数。这不需要在每个页面加载(即非管理相关页面)上运行。此函数需要请求对象或用户 ID。
我知道我可以创建一个新视图并从页面的 javascript 调用它,但这似乎是一种可怕的方法。有没有办法以某种方式将功能附加到管理页面加载服务器端而不添加任何额外的依赖项?
更新:该函数用于连接一种日志系统,该系统跟踪每个用户每天的第一次/最后一次交互,每当用户使用管理界面时就需要更新该交互。看来中间件应用程序可以让我做我想做的事,谢谢你们!