다음을 시도해보십시오. 기능이있는 모듈에 잠금 장치를 달고 기능 입력이 잠금 장치가 필요한 경우, 기능. 그렇지 않으면하지 마십시오.
l = threading.RLock()
def fn(arg):
if arg == arg_that_needs_lock:
l.acquire()
try:
# do stuff
finally:
l.release()
else:
# do other stuff
편집 : 지금까지 내가 지금 말할 수있는
는, 문제는 실제로 같은 시간에 같은 인수와 동일한 기능을 실행 두 스레드를 방지하는 방법에 대한 것입니다 . 두 개의 스레드가 동시에 다른 인수로 같은 함수를 실행해도 문제는 없습니다. 함수가 많은 다른 인수로 호출 할 수있는 경우 있음,하지만,
import threading
dict_lock = threading.RLock()
locks = {}
def fn_dict(arg):
dict_lock.acquire()
try:
if arg not in dict:
locks[arg] = threading.RLock()
l = locks[arg]
finally:
dict_lock.release()
l.acquire()
try:
# do stuff
finally:
l.release()
: 함수에 유효한 모든 인수가 사전에 키가 될 수있는 경우 간단한 방법은,이 작업을 수행하기 위해 잠금 인수의 사전을 만드는 것입니다 많은 자물쇠가 걸린다. 아마도 더 좋은 방법은 함수가 현재 실행중인 모든 인수 집합을 갖고 해당 집합의 내용을 잠금으로 보호하는 것입니다. 이게 작동해야한다고 생각합니다 :
유일한 문제는 내가 어떤 잠금이 필요하다는 것을 미리 조정 산사 나무의 열매하지 않습니다, 나는 잠이 필요 다른 스레드가 예를 들어 인수 – Ib33X
에 대해 동일한 값을 사용하는 경우에만 대답을 얻을 수 있습니다. 그렇지 않으면 우리는 귀하의 질문이 의미하는 바를 단지 추측합니다 - 당신이 그것을 더 명확하게 편집 할 수 있는지보십시오. 파이썬 2.4에서 –
은 with 문이 없다. – Ib33X