>백엔드 개발 >파이썬 튜토리얼 >Python의 멀티스레딩은 어떻게 `map`과 `pool`을 사용하여 코드 효율성을 향상시킬 수 있습니까?

Python의 멀티스레딩은 어떻게 `map`과 `pool`을 사용하여 코드 효율성을 향상시킬 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-21 07:44:14343검색

How Can Python's Multithreading Enhance Code Efficiency Using `map` and `pool`?

Python에서 스레딩 활용

나날이 발전하는 프로그래밍 세계에서 코드 효율성을 향상시키기 위해 다중 스레드의 활용이 점점 더 중요해지고 있습니다. . 이 기사의 목적은 Python의 여러 스레드에 작업을 효과적으로 배포하는 방법을 보여주는 포괄적인 예를 제공하는 것입니다.

맵과 풀을 사용한 멀티스레딩

최신 Python은 다음과 같은 경우 상당한 단순성을 제공합니다. 맵과 풀이 도입되면서 멀티스레딩이 가능해졌습니다. "한 줄의 병렬 처리"에 대한 유명한 기사에서 파생된 아래 코드 조각은 이 접근 방식의 강력함을 우아하게 보여줍니다.

from multiprocessing.dummy import Pool as ThreadPool
pool = ThreadPool(4)
results = pool.map(my_function, my_array)

이 다중 스레드 코드는 다음 단일 스레드 버전과 동등한 역할을 합니다.

results = []
for item in my_array:
    results.append(my_function(item))

이해 map

Python의 다재다능한 함수인 Map은 시퀀스의 각 요소에 지정된 함수를 적용하여 병렬 처리를 단순화합니다. 시퀀스를 효율적으로 반복하고, 함수를 실행하고, 결과를 목록에 집계합니다.

멀티프로세싱 및 더미 멀티프로세싱

멀티프로세싱과 잘 알려지지 않은 형제 멀티프로세싱 .dummy, 지도 기능의 병렬 버전을 제공합니다. 멀티프로세싱은 여러 프로세스를 활용하는 반면, 더미 변형은 스레드를 사용하므로 입력/출력 집약적인 작업에 이상적입니다.

multiprocessing.dummy를 사용한 구현

다음 코드를 고려하세요. multiprocessing.dummy를 활용하여 여러 URL을 여는 스니펫 동시에:

import urllib2
from multiprocessing.dummy import Pool as ThreadPool

urls = [
  'http://www.python.org',
  'http://www.python.org/about/',
  'http://www.onlamp.com/pub/a/python/2003/04/17/metaclasses.html',
  'http://www.python.org/doc/',
  'http://www.python.org/download/',
  'http://www.python.org/getit/',
  'http://www.python.org/community/',
  'https://wiki.python.org/moin/',
]

pool = ThreadPool(4)
results = pool.map(urllib2.urlopen, urls)
pool.close()
pool.join()

타이밍 결과는 다중 스레드를 사용하여 상당한 성능 향상을 보여줍니다.

Single thread:   14.4 seconds
       4 Pool:   3.1 seconds
       8 Pool:   1.4 seconds
      13 Pool:   1.3 seconds

여러 인수 전달

Python 3.3 및 나중에 다음을 사용하여 풀 내의 함수에 여러 인수를 전달할 수 있습니다. 기술:

  • 여러 배열 전달:
results = pool.starmap(function, zip(list_a, list_b))
  • 상수 및 배열 전달:
results = pool.starmap(function, zip(itertools.repeat(constant), list_a))

위 내용은 Python의 멀티스레딩은 어떻게 `map`과 `pool`을 사용하여 코드 효율성을 향상시킬 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.