python 스레드 탱크의 네 가지 장점 총결

1. 사용 이점


성능 향상: 대량의 신설 정지 라인 비용을 줄이고 라인 자원을 중용했다.
적용 장면: 대량의 돌발 요청을 처리하거나 대량의 라인으로 임무를 완성해야 하지만 실제 임무 처리 시간이 짧다.
방어 기능: 시스템이 라인이 너무 많아서 시스템의 부하가 너무 커서 상응하는 느려지는 문제를 효과적으로 피할 수 있다.
코드 장점: 스레드 탱크의 문법을 사용하는 것이 자신의 스레드를 만드는 것보다 간단합니다.

2. 인스턴스


"""
@file   : 004- .py
@author : xiaolu
@email  : [email protected]
@time   : 2021-02-01
"""
import concurrent.futures
import requests
from bs4 import BeautifulSoup
 
 
def craw(url):
    #  
    r = requests.get(url)
    return r.text
 
 
def parse(html):
    #  
    soup = BeautifulSoup(html, "html.parser")
    links = soup.find_all("a", class_="post-item-title")
    return [(link["href"], link.get_text()) for link in links]   #  
 
 
if __name__ == '__main__':
    #  
    urls = [
        "https://www.cnblogs.com/sitehome/p/{}".format(page) for page in range(1, 50 + 1)
    ]
        
    # craw
    with concurrent.futures.ThreadPoolExecutor() as pool:
        htmls = pool.map(craw, urls)
        htmls = list(zip(urls, htmls))
        for url, html in htmls:
            print(url, len(html))
    print("craw over")
    
    # parse
    with concurrent.futures.ThreadPoolExecutor() as pool:
        futures = {}
        for url, html in htmls:
            future = pool.submit(parse, html)
            futures[future] = url
    
        # for future, url in futures.items():
        #     print(url, future.result())
    
        for future in concurrent.futures.as_completed(futures):
            url = futures[future]
            print(url, future.result())
지식 보충:
스레드 탱크의 사용
스레드 탱크의 기본 클래스는concurrent입니다.futures 모듈의 Executor, Executor는 두 가지 하위 클래스를 제공합니다. 즉, ThreadPoolExecutor와 ProcessPoolExecutor입니다. 그 중에서 ThreadPoolExecutor는 라인 풀을 만드는 데 사용되고, ProcessPoolExecutor는 프로세스 풀을 만드는 데 사용됩니다.
만약 스레드 탱크/프로세스 탱크를 사용하여 프로그래밍을 관리하고 발송한다면, 상응하는task 함수를 스레드 탱크/프로세스 탱크에 제출하면 나머지는 스레드 탱크/프로세스 탱크로 처리됩니다.
Exectuor는 다음과 같은 일반적인 방법을 제공합니다.
submit(fn, *args, *kwargs): fn 함수를 스레드 탱크에 제출합니다.*args는 fn 함수에 전달되는 매개 변수를 대표하고 *kwargs는 키워드 매개 변수의 형식으로 fn 함수에 전달되는 매개 변수를 대표한다.
맵(func,*iterables,timeout=None,chunksize=1): 이 함수는 전역 함수 맵(func,*iterables)과 유사하지만, 이 함수는 여러 개의 라인을 시작하여 비동기적으로 iterables에 대해 맵 처리를 즉시 실행합니다.
shutdown(wait=True): 스레드 풀을 닫습니다.
프로그램이 task 함수를 스레드 탱크에 제출하면 submit 방법은 Future 대상을 되돌려줍니다. Future 클래스는 주로 스레드 작업 함수의 반환 값을 가져오는 데 사용됩니다.스레드 작업은 새 스레드에서 비동기적으로 수행되기 때문에 스레드가 수행하는 함수는 "장래 완료"작업에 해당하기 때문에 Python은 Future를 사용합니다.
이python 스레드 탱크의 네 가지 장점에 대해 정리한 이 글은 여기까지 소개했습니다. 더 많은 관련python 스레드 탱크의 네 가지 장점 귀납 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기