Python의 동시성

동시성은 종종 병렬 처리로 오해됩니다. 동시성은 독립적 인 코드가 체계적으로 실행되도록 스케줄링하는 것을 의미합니다. 이 장에서는 Python을 사용하는 운영 체제의 동시 실행에 중점을 둡니다.

다음 프로그램은 운영 체제에 대한 동시 실행을 도와줍니다.

import os
import time
import threading
import multiprocessing

NUM_WORKERS = 4

def only_sleep():
   print("PID: %s, Process Name: %s, Thread Name: %s" % (
      os.getpid(),
      multiprocessing.current_process().name,
      threading.current_thread().name)
   )
   time.sleep(1)

def crunch_numbers():
   print("PID: %s, Process Name: %s, Thread Name: %s" % (
      os.getpid(),
      multiprocessing.current_process().name,
      threading.current_thread().name)
   )
   x = 0
   while x < 10000000:
      x += 1
for _ in range(NUM_WORKERS):
   only_sleep()
end_time = time.time()
print("Serial time=", end_time - start_time)

# Run tasks using threads
start_time = time.time()
threads = [threading.Thread(target=only_sleep) for _ in range(NUM_WORKERS)]
[thread.start() for thread in threads]
[thread.join() for thread in threads]
end_time = time.time()

print("Threads time=", end_time - start_time)

# Run tasks using processes
start_time = time.time()
processes = [multiprocessing.Process(target=only_sleep()) for _ in range(NUM_WORKERS)]
[process.start() for process in processes]
[process.join() for process in processes]
end_time = time.time()

print("Parallel time=", end_time - start_time)

산출

위의 프로그램은 다음과 같은 출력을 생성합니다-

설명

"multiprocessing"은 threading 모듈과 유사한 패키지입니다. 이 패키지는 로컬 및 원격 동시성을 지원합니다. 이 모듈로 인해 프로그래머는 주어진 시스템에서 여러 프로세스를 사용하는 이점을 얻습니다.