python 다 중 스 레 드 및 하위 스 레 드 의 반환 값 가 져 오기
import threading
class MyThread(threading.Thread):
def __init__(self,func,args=()):
super(MyThread,self).__init__()
self.func = func
self.args = args
def run(self):
self.result = self.func(*self.args)
def get_result(self):
try:
return self.result # join , self.result
except Exception:
return None
def foo(a,b,c):
time.sleep(1)
print a*2,b*2,c*2,
return a*2,b*2,c*2
st = time.time()
li = []
for i in xrange(4):
t = MyThread(foo,args=(i,i+1,i+2))
li.append(t)
t.start()
for t in li:
t.join() # join, ,
print t.get_result()
et = time.time()
print et - st
실행 결과
0 2 4 (0, 2, 4)
4 6 8 2 4 6 (2, 4, 6)
(4, 6, 8)
6 8 10 (6, 8, 10)
1.00200009346
원 그룹의 결 과 는 함수 foo 의 반환 값 입 니 다.결과 가 왜 이렇게 어 지 러 운 지 알 수 있 습 니 다.각 하위 스 레 드 foo 의 print 와 주 스 레 드 print get 때 문 이 라 고 생각 합 니 다.result()가 함께 시스템 자원 을 선점 하여 발생 합 니 다.다음은 python 이 하위 스 레 드 의 반환 값 을 얻 는 것 을 소개 합 니 다.구체 적 인 코드 는 다음 과 같 습 니 다.
import sys
import threading
import Queue
q = Queue.Queue()
def worker1(x, y):
func_name = sys._getframe().f_code.co_name
print "%s run ..." % func_name
q.put((x + y, func_name))
def worker2(x, y):
func_name = sys._getframe().f_code.co_name
print "%s run ...." % func_name
q.put((x - y, func_name))
if __name__ == '__main__':
result = list()
t1 = threading.Thread(target=worker1, name='thread1', args=(10, 5, ))
t2 = threading.Thread(target=worker2, name='thread2', args=(20, 1, ))
print '-' * 50
t1.start()
t2.start()
t1.join()
t2.join()
while not q.empty():
result.append(q.get())
for item in result:
if item[1] == worker1.__name__:
print "%s 's return value is : %s" % (item[1], item[0])
elif item[1] == worker2.__name__:
print "%s 's return value is : %s" % (item[1], item[0])
이것 은 현재 가장 주류 인 스 레 드 데 이 터 를 얻 는 방법 이다.Queue 라 이브 러 리 를 사용 하여 대기 열 인 스 턴 스 를 만 들 고 스 레 드 간 의 데 이 터 를 저장 하고 전달 합 니 다.Python 의 대기 열 은 스 레 드 가 안전 합 니 다.즉,여러 스 레 드 가 한 대기 열 에 동시에 접근 해도 충돌 하지 않 습 니 다.Python 대기 열 은 세 가지 FIFO 가 먼저 나 오고 FILO 가 먼저 나 온 후에 나 오 며 우선 순위 대기 열(단독 우선 순위 매개 변수 로 순 서 를 결정 합 니 다)이 있 습 니 다.사용 대기 열 은 간단 한 생산자 C 소비자 모델 을 실현 할 수 있다.총결산
위 에서 말 한 것 은 소 편 이 소개 한 python 이 다 중 스 레 드 와 하위 스 레 드 의 반환 값 을 가 져 오 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.