๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

Python์˜ ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ๋ž€ ๋ณธ๋ฌธ

๐Ÿ‘ฉ‍๐Ÿ’ป ์ปดํ“จํ„ฐ ๊ตฌ์กฐ/About Computer

Python์˜ ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ๋ž€

์ง•์ง•์•ŒํŒŒ์นด 2022. 11. 22. 16:48
728x90
๋ฐ˜์‘ํ˜•

<๋ณธ ๋ธ”๋กœ๊ทธ๋Š” exmemory ๋‹˜์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค :-)>

https://exmemory.tistory.com/78

 

[Python] ๋™๊ธฐ, ๋น„๋™๊ธฐ, ๋ธ”๋Ÿญ, ๋„Œ๋ธ”๋Ÿญ ํŒŒ์ด์ฌ์œผ๋กœ ์•Œ์•„๋ณด๊ธฐ

๊ฐœ๋ฐœ์ž๋ผ๋ฉด ํ•œ ๋ฒˆ์”ฉ ๋“ฃ๊ฒŒ๋˜๋Š” ๋™๊ธฐ(Synchronous), ๋น„๋™๊ธฐ(Asynchronous), ๋ธ”๋Ÿญ(Block), ๋„Œ๋ธ”๋Ÿญ(Non-block)์„ Python์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ์„  ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ์ •์˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Block : ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜๊ฐ€

exmemory.tistory.com

 

 

๋ธ”๋ก(Block) : ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜๊ฐ€ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์ „๊นŒ์ง€ ์ œ์–ด๊ถŒ์„ ๋Œ๋ ค์ฃผ์ง€ ์•Š์Œ
๋…ผ-๋ธ”๋ก(Non-Block) : ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜๊ฐ€ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์ „์— ์ œ์–ด๊ถŒ์„ ๋ฐ˜ํ™˜ํ•˜์—ฌ ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜๊ฐ€ ์ค‘๊ฐ„์— ๋‹ค๋ฅธ ์ผ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ
๋™๊ธฐ(Synchronous) : ํ•จ์ˆ˜๋ฅผ ๋‹จ์ผ์ ์œผ๋กœ ์ˆ˜ํ–‰ (๊ฐ๊ฐ์˜ ํ•จ์ˆ˜๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ˆ˜ํ–‰)
๋น„๋™๊ธฐ(Asynchronous) : ํ•จ์ˆ˜๋ฅผ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ˆ˜ํ–‰ (๊ฐ๊ฐ์˜ ํ•จ์ˆ˜๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์ˆ˜ํ–‰).

 

 

๐Ÿงธ ๋™๊ธฐ Synchronous

์‹ฑ๊ธ€ ์“ฐ๋ ˆ๋“œ : ๋ชจ๋“  ์ฝ”๋“œ์˜ ์‹คํ–‰์ด ๋๋‚˜์•ผ ์ฃผ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ

๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ : ์ฃผ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋จผ์ € ์ข…๋ฃŒ๋  ์ˆ˜ ์žˆ์Œ (์‹คํ–‰ ์ค‘์ธ ์“ฐ๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ์œผ๋ฉด ํ”„๋กœ์„ธ์Šค๋Š” ์ข…๋ฃŒ๋˜์ง€ ์•Š์Œ)

 

- Thread ํด๋ž˜์Šค ์ƒ์„ฑํ•ด์„œ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

   1. ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋กœ, ๋…๋ฆฝ์ ์ธ ์‹คํ–‰ํ๋ฆ„์„ ๊ฐ–๊ณ  ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์€ ์ฝ”๋“œ๋ฅผ ํ•จ์ˆ˜ ์ •์˜ํ•ด์„œ ๊ตฌํ˜„

   2. threading.Thread() ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ target ์ด๋ผ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋กœ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์€ ํ•จ์ˆ˜๋ช…์„ ์ง€์ •

       ๊ฐ์ฒด ๋ณ€์ˆ˜ = threading.Thread(target = "ํ•จ์ˆ˜๋ช…", args = (a, b ..) )

        threading.Thread ํด๋ž˜์Šค์˜ ๋งค๊ฐœ๋ณ€์ˆ˜

        target : ์“ฐ๋ ˆ๋“œ๋กœ ์‹คํ–‰ํ•  ํ•จ์ˆ˜๋ช…์„ ๋ช…์‹œ

        args : target์—์„œ ๋ช…์‹œํ•œ ํ•จ์ˆ˜๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํŠœํ”Œ๋กœ ๋งŒ๋“ค์–ด์„œ ์ž‘์—…

   3. ๊ฐ์ฒด์˜ start ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์“ฐ๋ ˆ๋“œ๋ฅผ start ํ•จ

        ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ start๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์Šค์ผ€์ฅด๋Ÿฌ๊ฐ€ ์ ์ ˆํ•œ ์‹œ์ ์— ์“ฐ๋ ˆ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ , target ์†์„ฑ์— ์ง€์ •ํ•œ                 ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค        

 

- Thread ํด๋ž˜์Šค ์ƒ์„ฑํ•ด์„œ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

   1. threading.Thread ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•ด์„œ ํด๋ž˜์Šค ์ •์˜

        class ํด๋ž˜์Šค๋ช… (threading.Thread)

   2. ์ƒ์„ฑ์ž์˜ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์žฅ์—์„œ Thread ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•จ

        def __init__(self) :

            threading.Thread.__init__(self)

   3. threading.Thread ํด๋ž˜์Šค์˜ run ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜ ํ•จ

        ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ run์— ๊ตฌํ˜„

        def run(self) :

            # ์“ฐ๋ ˆ๋“œ๋กœ ์‹คํ–‰ํ•  ์ฝ”๋“œ ์ •์˜

    4. start() ํ˜ธ์ถœ

        start๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ์“ฐ๋ ˆ๋“œ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‹คํ–‰ํ•  ์ค€๋น„๋ฅผ ํ•˜๊ณ  ์ ๋‹นํ•œ ์‹œ์ ์— ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•ด์„œ ๊ทธ ์“ฐ๋ ˆ๋“œ ๊ฐ์ฒด์˜ run ๋ฉ”์†Œ๋“œ ์‹คํ–‰

        target ์†์„ฑ์— ์ •์˜ํ•œ ํ•จ์ˆ˜ ์‹คํ–‰

 

 

 

๐Ÿงธ ๋น„๋™๊ธฐ Asynchronous

๐Ÿงฉ ์ฝ”๋ฃจํ‹ด(Coroutine)

ํŠน์ • ์‹œ์ ์— ์ž์‹ ์˜ ์‹คํ–‰๊ณผ ๊ด€๋ จ๋œ ์ƒํƒœ๋ฅผ ์–ด๋”˜๊ฐ€์— ์ €์žฅํ•œ ๋’ค ์‹คํ–‰์„ ์ค‘๋‹จํ•˜๊ณ , ๋‚˜์ค‘์— ๊ทธ ์ƒํƒœ๋ฅผ ๋ณต์›ํ•˜์—ฌ ์‹คํ–‰์„ ์žฌ๊ฐœํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋ธŒ ๋ฃจํ‹ด

 

์„œ๋ธŒ ๋ฃจํ‹ด(Subroutine)์ด๋ž€ ์ผ๋ฐ˜์ ์œผ๋กœ ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” ํ•จ์ˆ˜

# Subroutine (Synchronous Function)
def subroutine():
    print('subroutine')

# Coroutine (Asynchronous Function)
async def coroutine():
    print('coroutine')

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•
Comments