python은 어떻게 파충류의 효율을 향상시킬 것인가

5175 단어 python파충류능률
단일 스레드 + 멀티태스킹 비동기 협동
  • 협정
  • 함수(특수 함수)를 정의할 때 async 수식을 사용합니다. 함수 호출 후 내부 문장은 즉시 실행되지 않고 협동 대상으로 되돌아옵니다.
  • 퀘스트 대상
  • 작업 대상 = 고급 협정 대상 (추가 봉인) = 특수 함수
    작업 대상은 시간 순환 대상에 등록해야 합니다
    작업 대상에 귀속 리셋: 파충류 데이터 분석 중
  • 이벤트 순환
  • 작업 대상을 불러오는 용기로 삼다
    이벤트 순환 대상을 시작할 때, 저장된 작업 대상은 비동기적으로 실행된다
  • 특수 함수 내부에서 비동기 요청을 지원하지 않는 모듈을 쓸 수 없습니다. 예를 들어time,requests...그렇지 않으면 잘못을 갚지 않지만 비동기를 이룰 수 없다
  • time.sleep -- asyncio.sleep
    requests -- aiohttp
    
    import asyncio
    import time
    
    start_time = time.time()
    async def get_request(url):
      await asyncio.sleep(2)
      print(url,' !')
    
    urls = [
      'www.1.com',
      'www.2.com',
    ]
    
    task_lst = [] #  
    for url in urls:
      c = get_request(url) #  
      task = asyncio.ensure_future(c) #  
      # task.add_done_callback(...)  #  
      task_lst.append(task)
    
    loop = asyncio.get_event_loop() #  
    loop.run_until_complete(asyncio.wait(task_lst)) #  , 
    스레드 풀 + requests 모듈
    
    #  
    import time
    from multiprocessing.dummy import Pool
    
    start_time = time.time()
    url_list = [
      'www.1.com',
      'www.2.com',
      'www.3.com',
    ]
    def get_request(url):
      print(' ...',url)
      time.sleep(2)
      print(' !',url)
    
    pool = Pool(3)
    pool.map(get_request,url_list)
    print(' :',time.time()-start_time)
    두 가지 방법으로 파충류의 효율을 향상시키다
    flask 서버 만들기
    
    from flask import Flask
    import time
    
    app = Flask(__name__)
    
    @app.route('/bobo')
    def index_bobo():
      time.sleep(2)
      return 'hello bobo!'
    
    @app.route('/jay')
    def index_jay():
      time.sleep(2)
      return 'hello jay!'
    
    @app.route('/tom')
    def index_tom():
      time.sleep(2)
      return 'hello tom!'
    
    if __name__ == '__main__':
      app.run(threaded=True)
    aiohttp 모듈 + 단일 스레드 다중 작업 비동기 협동
    
    import asyncio
    import aiohttp
    import requests
    import time
    
    start = time.time()
    async def get_page(url):
      # page_text = requests.get(url=url).text
      # print(page_text)
      # return page_text
      async with aiohttp.ClientSession() as s: # session 
        async with await s.get(url=url) as response:
          page_text = await response.text()
          print(page_text)
      return page_text
    
    urls = [
      'http://127.0.0.1:5000/bobo',
      'http://127.0.0.1:5000/jay',
      'http://127.0.0.1:5000/tom',
    ]
    tasks = []
    for url in urls:
      c = get_page(url)
      task = asyncio.ensure_future(c)
      tasks.append(task)
    loop = asyncio.get_event_loop()
    loop.run_until_complete(asyncio.wait(tasks))
    
    end = time.time()
    print(end-start)
    
    #  !
    # hello tom!
    # hello bobo!
    # hello jay!
    # 2.0311079025268555
    
    '''
    aiohttp + 
     xpath 
    '''
    import aiohttp
    import asyncio
    from lxml import etree
    import time
    
    start = time.time()
    #  : 
    #  async with await 
    async def get_request(url):
      async with aiohttp.ClientSession() as s:
        async with await s.get(url=url) as response:
          page_text = await response.text()
          return page_text    #  
    
    #  , 
    def parse(task):
      page_text = task.result()
      tree = etree.HTML(page_text)
      msg = tree.xpath('/html/body/ul//text()')
      print(msg)
    
    urls = [
      'http://127.0.0.1:5000/bobo',
      'http://127.0.0.1:5000/jay',
      'http://127.0.0.1:5000/tom',
    ]
    tasks = []
    for url in urls:
      c = get_request(url)
      task = asyncio.ensure_future(c)
      task.add_done_callback(parse) # !
      tasks.append(task)
    loop = asyncio.get_event_loop()
    loop.run_until_complete(asyncio.wait(tasks))
    
    end = time.time()
    print(end-start)
    requests 모듈 + 스레드 탱크
    
    import time
    import requests
    from multiprocessing.dummy import Pool
    
    start = time.time()
    urls = [
      'http://127.0.0.1:5000/bobo',
      'http://127.0.0.1:5000/jay',
      'http://127.0.0.1:5000/tom',
    ]
    def get_request(url):
      page_text = requests.get(url=url).text
      print(page_text)
      return page_text
    
    pool = Pool(3)
    pool.map(get_request, urls)
    end = time.time()
    print(' :', end-start)
    
    #  
    # hello jay!
    # hello bobo!
    # hello tom!
    #  : 2.0467123985290527
    작은 매듭
  • 파충류의 가속은 현재 두 가지 방법을 장악하고 있다.
  • aiohttp 모듈 + 단일 스레드 다중 작업 비동기 협동
    requests 모듈 + 스레드 탱크
  • 파충류가 접촉하는 모듈은 세 가지가 있다.
  • requests
    urllib
    aiohttp
  • flask 오픈 서버에 접촉했습니다
  • 이상은python이 파충류 효율을 어떻게 향상시키는지에 대한 상세한 내용입니다. 더 많은python이 파충류 효율을 향상시키는 것에 관한 자료는 저희 다른 관련 글에 주목하세요!

    좋은 웹페이지 즐겨찾기