Ram*_*hum 16 python debugging concurrency future concurrent.futures
Python的futures软件包允许我们并行地享受ThreadPoolExecutor和ProcessPoolExecutor完成任务.
但是,对于调试,暂时用虚拟并行替换真正的并行性有用,它在主线程中以串行方式执行任务,而不会产生任何线程或进程.
有没有实现的DummyExecutor?
mat*_*ata 13
这样的事情应该这样做:
from concurrent.futures import Future, Executor
from threading import Lock
class DummyExecutor(Executor):
def __init__(self):
self._shutdown = False
self._shutdownLock = Lock()
def submit(self, fn, *args, **kwargs):
with self._shutdownLock:
if self._shutdown:
raise RuntimeError('cannot schedule new futures after shutdown')
f = Future()
try:
result = fn(*args, **kwargs)
except BaseException as e:
f.set_exception(e)
else:
f.set_result(result)
return f
def shutdown(self, wait=True):
with self._shutdownLock:
self._shutdown = True
if __name__ == '__main__':
def fnc(err):
if err:
raise Exception("test")
else:
return "ok"
ex = DummyExecutor()
print(ex.submit(fnc, True))
print(ex.submit(fnc, False))
ex.shutdown()
ex.submit(fnc, True) # raises exception
Run Code Online (Sandbox Code Playgroud)
在这种情况下可能不需要锁定,但是不能让它受伤.