Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 스레드로 동시성을 구현하는 방법은 무엇입니까?

<시간/>

소개

Python에는 스레드, 하위 프로세스, 생성기 및 동시 프로그래밍을 위한 기타 트릭을 사용하는 것과 같은 다양한 접근 방식이 있습니다. 계속해서 스레드를 구현하기 전에 동시성이 정확히 무엇인지 이해하겠습니다.

동시성은 별도의 I/O 스트림, 실행 중인 SQL 쿼리 등을 포함하여 실행이 서로 동시적이고 독립적인 것처럼 보이는 방식으로 여러 고유한 실행 경로를 열 수 있는 단일 프로그램 내에서 논리의 한 부분입니다. .

그것을 하는 방법..

먼저 사이트 URL을 통과하는 단일 스레드를 만들고 나중에 스레딩 개념을 사용하여 프로그램 속도를 높이는 방법을 살펴봅니다.

# 1단계 - 오늘 방문하고 싶은 웹사이트 url 목록 만들기import requeststutorialpoints_url =['https://www.tutorialspoint.com/python/index.htm','https://www.tutorialspoint.com/ cplusplus/index.htm','https://www.tutorialspoint.com/java/index.htm','https://www.tutorialspoint.com/html/index.htm','https://www. tutorialspoint.com/cprogramming/index.htm']


# 전달된 URL을 요청하고 상태를 반환하는 함수 codedef visit_site(site_url):"""웹사이트 URL에 GET 요청을 하고 응답 정보를 출력합니다."""response =requests.get(site_url)print(f' *** {site_url}은 {response.elapsed}초 후에 {response.status_code}를 반환했습니다')


# responseif __name__ =='__main__':for site_url in tutorialpoints_url:visit_site(site_url)print(f" *** 프로그램 끝 ***")
를 가져오기 위해 단일 스레드를 생성해 보겠습니다.


*** https://www.tutorialspoint.com/python/index.htm은 0:00:00.091103초 후에 200을 반환했습니다.*** https://www.tutorialspoint.com/cplusplus/index.htm은 200을 반환했습니다. 0:00:00.069889초 후*** https://www.tutorialspoint.com/java/index.htm은 0:00:00.075864초 후에 200을 반환했습니다.*** https://www.tutorialspoint.com/html/index .htm은 0:00:00.075270초 후에 200을 반환했습니다.*** https://www.tutorialspoint.com/cprogramming/index.htm은 0:00:00.077984초 후에 200을 반환했습니다.*** 프로그램 끝 *** 

출력에서 무엇을 관찰했습니까? 사이트 URL은 순차적으로 처리됩니다. 방문하려는 다양한 지리적 위치에서 100개의 URL이 있는 경우 프로그램이 서버의 응답을 기다리는 데 많은 시간을 할애한다고 상상해 보십시오.

이제 요청을 병렬로 제출하고 기다리지 않고 다음 단계로 진행하는 스레드 프로그램을 작성해 보겠습니다.

스레딩에서 가져오기 Thread# 함수를 사용하여 전달된 URL을 요청하고 상태 codedef visit_site(site_url)를 반환합니다. print(f' *** {site_url}은 {response.elapsed} 초 후에 {response.status_code}를 반환했습니다.')# 웹사이트 URL을 순환하고 각 urlif에 대한 스레드를 생성합니다. __name__ =='__main__':for site_url in tutorialpoints_url:t =스레드(대상=방문_사이트, 인수=(사이트_URL,))t.start()


*** https://www.tutorialspoint.com/python/index.htm은 0:00:00.082176초 후 200을 반환했습니다.*** https://www.tutorialspoint.com/html/index.htm은 200을 반환했습니다. 0:00:00.086269초 후*** https://www.tutorialspoint.com/java/index.htm은 0:00:00.100746초 후에 200을 반환했습니다.*** https://www.tutorialspoint.com/cplusplus/index .htm은 0:00:00.120744초 후에 200을 반환했습니다 *** https://www.tutorialspoint.com/cprogramming/index.htm은 0:00:00.111489초 후에 200을 반환했습니다.

토론..

  • 스레딩 라이브러리는 자체 스레드에서 호출 가능한 모든 Python을 실행하는 데 사용할 수 있습니다.

  • start() 메소드는 site_url 인수를 사용하여 visit_site 함수를 호출합니다.

  • 일단 시작된 스레드는 운영 체제에서 완전히 관리되는 자체 스레드에서 실행됩니다.

이제 스레드가 활성 또는 종료(완료)되었는지 확인하려면 is_alive 함수를 사용할 수 있습니다.

if t.is_alive():print(f' *** {t}가 아직 실행 중이면')else:print(f' *** {t}가 완료됨')


***  완료됨