我正在阅读任务取消的异步文档,我遇到了这个-
要取消正在运行的任务,请使用 cancel() 方法。调用它会导致任务将 CancelledError 异常抛出到包装的协程中。如果协程在取消期间等待 Future 对象,则 Future 对象将被取消。
cancelled() 可用于检查任务是否被取消。如果包装的协程没有抑制 CancelledError 异常并且实际上被取消,则该方法返回 True 。
我在这里有几个问题 -
包装协程是调用取消的协程吗?让我们在这里举个例子——
async def wrapped_coroutine():
for task in asyncio.Task.all_tasks():
task.cancel()
Run Code Online (Sandbox Code Playgroud)
那么wrapped_coroutine()封装的协程是否会抛出异常呢?
什么时候会抛出这个异常?在哪里?
这里抑制异常是什么意思?是不是这个意思——
async def wrapped_coroutine():
for task in asyncio.Task.all_tasks():
task.cancel()
try:
await task
except asyncio.CancelledError:
print("Task cancelled")
Run Code Online (Sandbox Code Playgroud)
如果没有,请提供有关如何抑制此异常的示例。
还有一个不相关的(它与取消任务有关),当我取消这些任务时如何从这些任务中检索异常,所以我看不到这个 -
Task exception was never retrieved future:
Run Code Online (Sandbox Code Playgroud)
是之前task.cancel()还是try之前await task(在上面的例子中)?
我在PostgreSQL中使用django,每当我尝试保存或删除任何内容时,都会发生此错误-
Traceback (most recent call last):
File "c:\program files (x86)\python35-32\Lib\wsgiref\handlers.py", line 138, in run
self.finish_response()
File "c:\program files (x86)\python35-32\Lib\wsgiref\handlers.py", line 180, in finish_response
self.write(data)
File "c:\program files (x86)\python35-32\Lib\wsgiref\handlers.py", line 274, in write
self.send_headers()
Not Found: /favicon.ico
File "c:\program files (x86)\python35-32\Lib\wsgiref\handlers.py", line 332, in send_headers
self.send_preamble()
File "c:\program files (x86)\python35-32\Lib\wsgiref\handlers.py", line 255, in send_preamble
('Date: %s\r\n' % format_date_time(time.time())).encode('iso-8859-1')
[02/Aug/2016 18:30:14] "GET /favicon.ico HTTP/1.1" 404 2044
File "c:\program files (x86)\python35-32\Lib\wsgiref\handlers.py", line 453, in _write
self.stdout.write(data)
File "c:\program files (x86)\python35-32\Lib\socket.py", line 593, in …Run Code Online (Sandbox Code Playgroud) 我有一个字典 -
a = {'b': [1,2,3], 'c':[4,5,6]}
Run Code Online (Sandbox Code Playgroud)
我只想使用list comprehension来实现这个输出 -
[['c', 4], ['c', 5], ['c', 6], ['b', 1], ['b', 2], ['b', 3]]
Run Code Online (Sandbox Code Playgroud)
一个简单的for循环完成它 -
x = []
for k, v in a.iteritems():
for i in v:
x.append([k, i])
Run Code Online (Sandbox Code Playgroud)
试图将其转换为列表理解,我这样做 -
[[k,i] for i in v for k, v in a.items()]
Run Code Online (Sandbox Code Playgroud)
但奇怪的是,我得到了一个输出
[['c', 1], ['b', 1], ['c', 2], ['b', 2], ['c', 3], ['b', 3]]
Run Code Online (Sandbox Code Playgroud)
什么应该是正确的列表理解,为什么我的列表理解不起作用?