这是取消任务的示例:
import asyncio
async def some_func():
await asyncio.sleep(2)
print('Haha! Task keeps running!')
await asyncio.sleep(2)
async def cancel(task):
await asyncio.sleep(1)
task.cancel()
async def main():
func_task = asyncio.ensure_future(some_func())
cancel_task = asyncio.ensure_future(cancel(func_task))
try:
await func_task
except asyncio.CancelledError:
print('Task cancelled as expected')
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
# Task cancelled as expected
# [Finished in 1.2s]
正常,任务已取消。如果CancelledError
陷在some_func
任务中不会被取消:
async def some_func():
try:
await asyncio.sleep(2)
except:
pass
print('Haha! Task keeps running!')
await asyncio.sleep(2)
# Haha! Task keeps running!
# [Finished in 3.2s]
可能很容易忘记我不应该在异步代码内(some_func
例如,可以是第三方代码)禁止任何地方的异常,但是 应该
取消任务。反正我能做到吗?还是被忽略CancelledError
意味着任务根本无法取消?
您无法取消抑制的任务CancelledError
。这类似于无法关闭忽略的生成器GeneratorExit
。
这是故意行为。任务可能要在取消上做一些额外的工作(例如,资源清理),因此捕获CancelledError
可能是个好主意,但抑制通常是编程错误的标志。
如果您有坚定的意图,Python通常允许您自己射击。
捕获所有异常甚至禁止通过按下来关闭python进程,因为它是在KeyboardInterrupt
内部翻译的。
试图从其他人那里得到答案 假设我有一个简单的控制器,如下所示: 我希望处理忽略“取消”信号,这通常在客户端断开连接时出现。试图通过nginx的
问题内容: 我一直在阅读文档并进行搜索,但似乎找不到直接的答案: 你可以取消已经执行的任务吗?(由于任务已开始,需要一段时间,因此需要取消一半) 我是从Celery FAQ的文档中找到的 但是我不清楚这是否会取消排队的任务,或者是否会杀死工作程序上正在运行的进程。感谢你能摆脱的光芒! 问题答案: 撤销将取消任务执行。如果任务被吊销,工人将忽略该任务并且不执行它。如果你不使用持久撤销,则可以在wor
根据我的理解,clean现在将调用clearVersionProperties,war将调用WriteVersionProperties。 但当我执行分级清洁时,Reactor计划看起来是这样的: 为什么要执行clearVersionProperties和writeVersionProperties任务,因为它们绑定到某些构建阶段?例如,不执行任务infoEnv,而是执行任务writeVersio
如果网络连接已打开超过几个小时,我将使用关闭网络连接。然而,在大多数情况下,网络连接在达到超时之前就关闭了,因此我取消了。在这种情况下,我还希望executor服务终止并释放其线程池。 令我惊讶的是,这并不是开箱即用的:虽然我在调度任务后对executor服务调用了<code>shutdown(),但当其唯一调度的任务被取消时,executor不会自动终止。从这种行为甚至可能是正确的,因为可以说取
问题内容: 我将Redis作为经纪人使用Celery(3.0.15)。 有没有一种简单的方法来查询Celery队列中存在的具有给定名称的任务数? 并且,作为后续措施,是否可以取消Celery队列中存在的所有具有给定名称的任务? 我已经看过《监控和管理指南》,在那儿看不到解决方案。 问题答案:
我是RxJava的新手。我有一个,用于下载图像URL列表并将其转换为位图的简单网络操作。 在活动的上,我取消订阅可观察到的以避免内存泄漏。 我能看到的是,如果我在图像下载过程中退出活动,后台任务也会被终止。我只想继续做背景工作,即使我已经取消了《观察家》的订阅。有可能吗?