ThreadPoolExecutor
에 함수를 제출하면 실행 프로그램은 스레드에서 함수를 실행하고 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
:
이 코드를 생각해 보자.
사용 가능한 일부 상용 옵션이 있습니다. 예.은 asyncio을 사용하는 것이 좋으며, 또한 have an example using sleep이라고 생각하십시오. 이 개념은 잠재적으로 블로킹 연산이 호출 될 때마다 항상 결과가 사용 가능할 때마다 실행을 계속해야한다는 메모와 함께 가장 바깥 쪽의 컨텍스트에서 실행되는 제어 루프에 제어를 반환함으로써 문제를 회피합니다. 당신의 경우, n
초 후에.
짧은 대답 - 노숙자의 사용은 디자인에 대한 문제, 오랜 대답 - 항상 휴식을 취할 수있는 맞춤형 수면을 구현할 수 있지만, 파이썬이나 정확하지는 않습니다. 다른 방법으로 잠금 사용을 확인할 수 있습니다. – Reishin