gue*_*tli 7 python concurrency concurrent.futures
我正在玩concurrent.futures.
目前我未来的电话time.sleep(secs).
似乎Future.cancel()比我想象的要少.
如果未来已经在执行,那么time.sleep()就不会取消它.
对于wait()的timeout参数也是如此.它不会取消我的time.sleep().
如何取消time.sleep()在concurrent.futures中执行哪些?
为了测试我使用ThreadPoolExecutor.
如果您向 a 提交一个函数ThreadPoolExecutor,执行器将在线程中运行该函数并将其返回值存储在该Future对象中。由于并发线程的数量是有限的,您可以选择取消future 的挂起执行,但是一旦工作线程中的控制权已传递给可调用对象,就无法停止执行。
考虑这段代码:
import concurrent.futures as f
import time
T = f.ThreadPoolExecutor(1) # Run at most one function concurrently
def block5():
time.sleep(5)
return 1
q = T.submit(block5)
m = T.submit(block5)
print q.cancel() # Will fail, because q is already running
print m.cancel() # Will work, because q is blocking the only thread, so m is still queued
Run Code Online (Sandbox Code Playgroud)
一般来说,每当您想要取消某些内容时,您自己就有责任确保取消。
不过,有一些现成的选项可用。例如,考虑使用asyncio,他们还有一个使用 sleep 的示例。这个概念通过以下方式规避了这个问题:每当调用任何潜在的阻塞操作时,将控制返回到在最外层上下文中运行的控制循环,并注意只要结果可用,就应继续执行 - 或者,你的情况,n几秒钟过去后。
| 归档时间: |
|
| 查看次数: |
1963 次 |
| 最近记录: |