[python] ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ Process ์‚ฌ์šฉ๋ฒ• ๋ฐ ์ฝ”๋“œ ์˜ˆ์‹œ | multiprocessing.Process | ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค์— ์„œ๋กœ ๋‹ค๋ฅธ ์ž‘์—…์„ ํ• ๋‹น

2024. 1. 7. 19:21ยท๐Ÿ’ป Programming/Python
๋ฐ˜์‘ํ˜•
 

[python] ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ Pool ์‚ฌ์šฉ๋ฒ• ๋ฐ ์ฝ”๋“œ ์˜ˆ์‹œ | multiprocessing.Pool | python ์†๋„ ํ–ฅ์ƒ

๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋…๋ฆฝ์ ์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ฐ๊ฐ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ณ‘๋ ฌ๋กœ ์ž‘์—…ํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ๋…๋ฆฝ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๊ฐ€์ง€๋ฉฐ, ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹  (Inter-Process Co

mvje.tistory.com

 

ํŒŒ์ด์ฌ์—์„œ ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด multiprocessing ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ์ค‘ ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ์‹์œผ๋กœ multiprocessing.Pool๊ณผ multiprocessing.Process๊ฐ€ ์žˆ๋‹ค. ์ด์ „ ํฌ์ŠคํŒ…์—์„œ๋Š” Pool์„ ์ค‘์‹ฌ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด์•˜๊ณ , ์ด๋ฒˆ์—๋Š” Process๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹๊ณผ ํ•จ๊ป˜ ๋‘ ๋ฐฉ์‹์˜ ์ฐจ์ด์ ์„ ๋น„๊ตํ•ด๋ณด๋ ค ํ•œ๋‹ค.

 

Pool๊ณผ Process๋Š” ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์ ‘๊ทผ ๋ฐฉ์‹์œผ๋กœ, ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋” ์ ํ•ฉํ•œ ๋ฐฉ์‹์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค. ํŠนํžˆ ๊ฐ ํ”„๋กœ์„ธ์Šค์— ์„œ๋กœ ๋‹ค๋ฅธ ์ž‘์—…์„ ํ• ๋‹นํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” Process๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•˜๋‹ค.


๐Ÿ“Œ multiprocessing.Pool

โœ… ๊ฐ„ํŽธํ•œ ์ธํ„ฐํŽ˜์ด์Šค
Pool ํด๋ž˜์Šค๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ฐ ํ”„๋กœ์„ธ์Šค์— ์ž‘์—…์„ ๋ถ„๋ฐฐํ•˜๋Š” ๊ณผ์ •์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค. ๋™์ผํ•œ ํ•จ์ˆ˜๋ฅผ ์—ฌ๋Ÿฌ ์ž…๋ ฅ๊ฐ’์— ๋ณ‘๋ ฌ๋กœ ์ ์šฉํ•  ๋•Œ ํŠนํžˆ ํŽธ๋ฆฌํ•˜๋‹ค.

 

โœ… ์ž‘์—… ๋ถ„๋ฐฐ ์ž๋™ํ™”
map, imap, apply ๋“ฑ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ๋‚˜๋ˆ  ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค์— ๋ถ„์‚ฐ์‹œํ‚ค๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋ณ‘ํ•ฉํ•˜๋Š” ์ž‘์—…๊นŒ์ง€ ๋‚ด๋ถ€์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค.

 

โœ… ํ”„๋กœ์„ธ์Šค ์ˆ˜ ์ œ์–ด
Pool(processes=n) ํ˜•ํƒœ๋กœ ์ƒ์„ฑ ์‹œ ์‚ฌ์šฉํ•  ํ”„๋กœ์„ธ์Šค์˜ ๊ฐœ์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” CPU ์ฝ”์–ด ์ˆ˜ ๋˜๋Š” ๋ณ‘๋ ฌ์ฒ˜๋ฆฌํ•  ์ž‘์—… ์ˆ˜์— ๋”ฐ๋ผ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๋‹ค.

 

# ์ฝ”๋“œ ์˜ˆ์ œ

from multiprocessing import Pool

def square_number(x):
    return x ** 2

if __name__ == "__main__":
    data = [1, 2, 3, 4, 5]

    with Pool(processes=3) as pool:
        results = pool.map(square_number, data)

    print("Results:", results)

 


๐Ÿ“Œ multiprocessing.Process

โœ… ์„ธ๋ฐ€ํ•œ ์ œ์–ด๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ์ ํ•ฉ
Process ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ , ์‹œ์ž‘(start()), ์ข…๋ฃŒ(terminate()), ๋Œ€๊ธฐ(join()) ๋“ฑ์˜ ๋™์ž‘์„ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค. ์ž‘์—… ํ๋ฆ„์„ ์ง์ ‘ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜์ง€๋งŒ, ๊ทธ๋งŒํผ ์œ ์—ฐํ•˜๊ฒŒ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

 

โœ… ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ (IPC) ๊ตฌํ˜„ ํ•„์š”
Process ๋ฐฉ์‹์—์„œ๋Š” ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ณต์œ ๋ฅผ ์ง์ ‘ ์ฒ˜๋ฆฌํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด Queue, Pipe, Value, Array ๋“ฑ์˜ IPC(Inter-Process Communication) ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋งŒํผ ๊ตฌํ˜„ ๋‚œ์ด๋„๋Š” ์•ฝ๊ฐ„ ๋†’์ง€๋งŒ, ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โœ… ๋‹ค์–‘ํ•œ ์ž‘์—… ์ฒ˜๋ฆฌ์— ์œ ๋ฆฌ
Pool์ด ๋™์ผํ•œ ํ•จ์ˆ˜๋ฅผ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ์— ์ ์šฉํ•  ๋•Œ ์œ ์šฉํ•œ ๋ฐ˜๋ฉด, Process๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์ž‘์—…์„ ๋ณ‘๋ ฌ๋กœ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ์ ํ•ฉํ•˜๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•˜๋‚˜๋Š” ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๋ฐ์ดํ„ฐ ๋กœ๊น…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์‹์˜ ๋ณ‘๋ ฌ ์ž‘์—… ์ฒ˜๋ฆฌ์— ์ž์ฃผ ์“ฐ์ธ๋‹ค.

 

# ์ฝ”๋“œ ์˜ˆ์ œ - ๊ธฐ๋ณธ

from multiprocessing import Process, Queue

def square_numbers(numbers, result_queue):
    squared_numbers = [x ** 2 for x in numbers]
    result_queue.put(squared_numbers)

if __name__ == "__main__":
    data = [1, 2, 3, 4, 5]
    result_queue = Queue()

    # ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉฐ, ์„œ๋กœ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰
    num_of_processes = 3
    processes = [Process(target=square_numbers, args=(data, result_queue)) for _ in range(num_of_processes)]

    for process in processes:
        process.start()

    for process in processes:
        process.join()

    # ๊ฒฐ๊ณผ๋ฅผ ํ์—์„œ ์ˆ˜์ง‘
    results = [result_queue.get() for _ in processes]

    print("Results:", results)
  • ์ด ์˜ˆ์‹œ์—์„œ๋Š” square_numbers ํ•จ์ˆ˜๊ฐ€ ๊ฐ๊ฐ์˜ ํ”„๋กœ์„ธ์Šค์—์„œ ์‹คํ–‰๋จ
  • ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ๋…๋ฆฝ์ ์œผ๋กœ data ๋ฆฌ์ŠคํŠธ์˜ ์ˆซ์ž๋ฅผ ์ œ๊ณฑํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ result_queue์— ๋„ฃ์Œ
  • ๋ฉ”์ธ ํ”„๋กœ์„ธ์Šค์—์„œ๋Š” ๊ฐ ํ”„๋กœ์„ธ์Šค์˜ ๊ฒฐ๊ณผ๋ฅผ ์ˆ˜์ง‘ํ•˜์—ฌ ์ถœ๋ ฅ

 

# ์ฝ”๋“œ ์˜ˆ์ œ - ๊ฐ ํ”„๋กœ์„ธ์Šค์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰

from multiprocessing import Process, Queue

def square_numbers(numbers, result_queue):
    squared_numbers = [x ** 2 for x in numbers]
    result_queue.put(squared_numbers)

def cube_numbers(numbers, result_queue):
    cubed_numbers = [x ** 3 for x in numbers]
    result_queue.put(cubed_numbers)

if __name__ == "__main__":
    data = [1, 2, 3, 4, 5]
    result_queue = Queue()

    # ๊ฐ ํ”„๋กœ์„ธ์Šค์— ๋‹ค๋ฅธ ํ•จ์ˆ˜ ํ• ๋‹น
    process1 = Process(target=square_numbers, args=(data, result_queue))
    process2 = Process(target=cube_numbers, args=(data, result_queue))

    # ํ”„๋กœ์„ธ์Šค ์‹œ์ž‘
    process1.start()
    process2.start()

    # ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ ๋Œ€๊ธฐ
    process1.join()
    process2.join()

    # ๊ฒฐ๊ณผ๋ฅผ ํ์—์„œ ์ˆ˜์ง‘
    results = [result_queue.get(), result_queue.get()]

    print("Squared Results:", results[0])
    print("Cubed Results:", results[1])
  • ํ”„๋กœ์„ธ์Šค๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋งŒ๋“ค๊ณ  ๊ฐ ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ์„œ๋กœ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ target์œผ๋กœ ๋„ฃ์–ด์ฃผ๋ฉด ๊ฐ ํ”„๋กœ์„ธ์Šค์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์˜ˆ์‹œ์—์„œ๋Š” ์ˆซ์ž๋ฅผ ์ œ๊ณฑํ•˜๋Š” square_numbers ํ•จ์ˆ˜์™€ ์ˆซ์ž๋ฅผ ์„ธ์ œ๊ณฑํ•˜๋Š” cube_numbers ํ•จ์ˆ˜๋ฅผ ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ ์‹คํ–‰
๋ฐ˜์‘ํ˜•

'๐Ÿ’ป Programming > Python' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[python] Streamlit ์œผ๋กœ ๋ฐ์ดํ„ฐ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋งŒ๋“ค๊ธฐ! | ๊ฐ„๋‹จํ•œ ๋Œ€์‹œ๋ณด๋“œ & ์›น๋ฐ๋ชจ ํŽ˜์ด์ง€ ๊ฐœ๋ฐœ  (1) 2024.07.08
[python] ํŒŒ์ด์ฌ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ | joblib ์‚ฌ์šฉ๋ฒ• | ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ | ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋”ฉ  (0) 2024.01.19
[python] ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ Pool ์‚ฌ์šฉ๋ฒ• ๋ฐ ์ฝ”๋“œ ์˜ˆ์‹œ | multiprocessing.Pool | python ์†๋„ ํ–ฅ์ƒ  (0) 2024.01.07
[pandas] ํŠน์ • ์ปฌ๋Ÿผ์—์„œ ํŠน์ • ๋ฌธ์ž์—ด์ด ํฌํ•จ๋œ ํ–‰ ์ฐพ๊ธฐ | str.contains  (0) 2023.11.17
[pandas] ํŠน์ • ์ปฌ๋Ÿผ์˜ ๊ฐ’์ด ๊ณต๋ฐฑ์ธ ํ–‰์„ ์ œ์™ธํ•˜๋Š” ๋ฐฉ๋ฒ• | dropna  (0) 2023.11.17
'๐Ÿ’ป Programming/Python' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [python] Streamlit ์œผ๋กœ ๋ฐ์ดํ„ฐ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋งŒ๋“ค๊ธฐ! | ๊ฐ„๋‹จํ•œ ๋Œ€์‹œ๋ณด๋“œ & ์›น๋ฐ๋ชจ ํŽ˜์ด์ง€ ๊ฐœ๋ฐœ
  • [python] ํŒŒ์ด์ฌ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ | joblib ์‚ฌ์šฉ๋ฒ• | ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ | ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋”ฉ
  • [python] ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ Pool ์‚ฌ์šฉ๋ฒ• ๋ฐ ์ฝ”๋“œ ์˜ˆ์‹œ | multiprocessing.Pool | python ์†๋„ ํ–ฅ์ƒ
  • [pandas] ํŠน์ • ์ปฌ๋Ÿผ์—์„œ ํŠน์ • ๋ฌธ์ž์—ด์ด ํฌํ•จ๋œ ํ–‰ ์ฐพ๊ธฐ | str.contains
๋ญ…์ฆค
๋ญ…์ฆค
AI ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ
    ๋ฐ˜์‘ํ˜•
  • ๋ญ…์ฆค
    moovzi’s Doodle
    ๋ญ…์ฆค
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
  • ๊ณต์ง€์‚ฌํ•ญ

    • โœจ About Me
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (213)
      • ๐Ÿ“– Fundamentals (34)
        • Computer Vision (9)
        • 3D vision & Graphics (6)
        • AI & ML (16)
        • NLP (2)
        • etc. (1)
      • ๐Ÿ› Research (75)
        • Deep Learning (7)
        • Perception (19)
        • OCR (7)
        • Multi-modal (5)
        • Image•Video Generation (18)
        • 3D Vision (4)
        • Material • Texture Recognit.. (8)
        • Large-scale Model (7)
        • etc. (0)
      • ๐Ÿ› ๏ธ Engineering (8)
        • Distributed Training & Infe.. (5)
        • AI & ML ์ธ์‚ฌ์ดํŠธ (3)
      • ๐Ÿ’ป Programming (92)
        • Python (18)
        • Computer Vision (12)
        • LLM (4)
        • AI & ML (18)
        • Database (3)
        • Distributed Computing (6)
        • Apache Airflow (6)
        • Docker & Kubernetes (14)
        • ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ (4)
        • C++ (1)
        • etc. (6)
      • ๐Ÿ’ฌ ETC (4)
        • ์ฑ… ๋ฆฌ๋ทฐ (4)
  • ๋งํฌ

    • ๋ฆฌํ‹€๋ฆฌ ํ”„๋กœํ•„ (๋ฉ˜ํ† ๋ง, ๋ฉด์ ‘์ฑ…,...)
    • ใ€Ž๋‚˜๋Š” AI ์—”์ง€๋‹ˆ์–ด์ž…๋‹ˆ๋‹คใ€
    • Instagram
    • Brunch
    • Github
  • ์ธ๊ธฐ ๊ธ€

  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
๋ญ…์ฆค
[python] ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ Process ์‚ฌ์šฉ๋ฒ• ๋ฐ ์ฝ”๋“œ ์˜ˆ์‹œ | multiprocessing.Process | ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค์— ์„œ๋กœ ๋‹ค๋ฅธ ์ž‘์—…์„ ํ• ๋‹น
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”