멀티 스레딩으로 파이썬 코드가 더 빨라지지 않는 이유는 무엇인가요? 어떻게 고칠 수 있나요?
파이썬은 내부 스레드 안전 요구 사항을 위해 GIL이라고 하는 전역 인터프리터 잠금으로 인터프리터에 대한 액세스를 제한합니다. 안타깝게도 이러한 설계 결정으로 인해 여러 스레드를 함께 실행할 수 있는 컴퓨터에서도 한 번에 하나의 스레드만 Python 코드를 해석할 수 있도록 제한됩니다.

데이터 집합에 대해 Python 코드를 실행하고 데이터를 독립적인 세그먼트로 분할할 수 있는 경우(데이터 분할이라고 하는 프로세스), Python의 다중 처리 라이브러리를 살펴볼 수 있습니다.

예를 들어 하나의 인자 arg1을 받는 함수 foo를 고려하고, 여러 값(예: val1, val2, val3)에 대해 foo 함수를 실행하고 싶다고 가정해 보겠습니다.

def foo(arg1):
  # do something

if __name__ == '__main__':
  foo(val1)
  foo(val2)
  foo(val3)

여러 프로세스에서 foo를 함께 실행하려면 멀티프로세싱 풀을 사용하여 여러 작업자 프로세스를 함께 실행할 수 있습니다:

멀티프로세싱 가져오기 풀에서

def foo(arg1):
  # do something

if __name__ == '__main__':
  p = Pool()
  p.map(foo, [val1, val2, val3])

멀티프로세싱 라이브러리는 병렬 프로그래밍을 위한 다양한 다른 API도 제공합니다. 더 자세히 알고 싶으신가요?
Why isn't multi-threading making my Python code faster? How can I fix it.
Python restricts access to the interpreter with a Global Interpreter Lock, referred to as the GIL, for internal thread-safety requirements. Unfortunately, this design decision restricts only allows one thread to interpret Python code at a time, even on a machine with the capability to run multiple threads together. 

If you wish to run Python code on a set of data, and the data can be broken up into independent segments (a process known as data partitioning), you may wish to look into the multiprocessing library in Python. 

As an example, consider the function foo which takes one argument, arg1, and say you wanted to run the foo function on a number of values, say, val1, val2, and val3.

def foo(arg1):
  # do something

if __name__ == '__main__':
  foo(val1)
  foo(val2)
  foo(val3)

To have foo execute on multiple processes together, you could use the multiprocessing Pool  to run multiple worker processes together:

from multiprocessing import Pool

def foo(arg1):
  # do something

if __name__ == '__main__':
  p = Pool()
  p.map(foo, [val1, val2, val3])

The multiprocessing library also provides various other APIs for parallel programming. Would you like to know more?