
π§ μ§λ TIL-080 κΈμ ν΅ν΄ νμ΄μ¬μ GIL(Global Interpreter Lock)μ λν΄ νμ΅νμλ€. μ²λ¦¬ν΄μΌνλ μ°μ°μ λ°λΌ Multiprocessing νΉμ Multithreadingμ΄ ν¨κ³Όμ μΌλ‘ μμ©ν μ μλλ° κ°λ¨ν μμ λ₯Ό ν΅ν΄ νμ΄μ¬μμμ μ μ©λ°©λ²μ μμλ³΄κ³ μ νλ€.
#Multiprocessing μ μ©X
import time
start = time.time()
def count(group):
for i in range(1, 50001):
print(f'{group} : {i}')
num_list = ['n1', 'n2', 'n3', 'n4']
for num in num_list:
count(num)
print(f'{time.time()-start} s')

#multiprocessing - Process ν¨μ μ¬μ©
start = time.time()
def count(group):
for i in range(1, 50001):
print(f'{group} : {i}')
if __name__ == '__main__':
process1 = multiprocessing.Process(target=count, args=('pr1',))
process2 = multiprocessing.Process(target=count, args=('pr2',))
process3 = multiprocessing.Process(target=count, args=('pr3',))
process4 = multiprocessing.Process(target=count, args=('pr4',))
process1.start()
process2.start()
process3.start()
process4.start()
process1.join()
process2.join()
process3.join()
process4.join()
print(f'{time.time()-start} s')

process1 = multiprocessing.Process(target=count, args=('pr1',)) μ½λμμ args=('pr1',)) λ‘ μμ±ν μ΄μ λ μ²μμ args=('pr1') λ‘ μμ±νμμ λ μλμ κ°μ μλ¬κ° λ¬κΈ° λλ¬Έμ΄λ€. 
def count(*args):
for i in range(1, 50001):
print(f'{args} : {i}')

arg=('pr1',) λ‘ μμ νμλ°. os.cpu_count()μ κ°μΌλ‘ μ§μ λλ€.close() μ terminate()μ΄ μλ€. close()λ λ μ΄μ Poolμ μΆκ° μμ
μ΄ λ€μ΄κ°μ§ μλλ€λ κ²μ μλ €μ£Όλ©°, μ§κΈ μν μ€μΈ μμ
μ΄ λͺ¨λ λλλ©΄ Poolμ νλ‘μΈμ€λ€μ μ’
λ£νλ€. terminate()λ₯Ό μ¬μ©νλ©΄, νμ¬ μ§ν μ€μΈ μμ
μ΄ μλλΌλ μ¦μ Poolμ νλ‘μΈμ€λ€μ μ’
λ£νλ€. join()μ Poolμ λͺ¨λ νλ‘μΈμ€λ€μ μ’
λ£κ° μλ£λκΈ°λ₯Ό κΈ°λ€λ¦°λ€.#multiprocessing
import time
import multiprocessing
start = time.time()
def count(group):
for i in range(1, 50001):
print(f'{group} : {i}')
num_list = ['n1', 'n2', 'n3', 'n4']
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=4)
pool.map(count, num_list)
pool.close()
pool.join()
print(f'{time.time()-start} s')
processes=4λ‘ μ€μ νμ¬ λ©ν°νλ‘μΈμ±μΌλ‘ ν¨μλ₯Ό λμμμΌ°λ€. 
πββοΈ multiprocessing λͺ¨λμ μΌλΆ ν¨μλ§μ μ¬μ©νμ¬ κ°λ¨ν λ©ν°νλ‘μΈμ±μ μλν΄λ³΄μλ€. μν©μ λ°λΌ λ€μν ννλ‘ μμ©μ΄ κ°λ₯νμ§λ§ μΆν μ μ°¨ μ¬μ© λ²μλ₯Ό λν κ° μμ μ΄λ€.