Multi-Threading

PySide6을 ν™œμš©ν•œ GUI μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ κ°œλ°œμ—μ„œλ„ Multi-Threading μ μš©μ€ ν•„μš”ν•˜λ‹€.

GUI μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ λ³΅μž‘ν•˜κ³  λ§Žμ€ 계산 μ‹œκ°„μ„ μš”κ΅¬ν•˜λŠ” μž‘μ—…μ„ μˆ˜ν–‰ν•  λ•Œ, λ°˜μ‘μ„±μ„ μœ μ§€ν•˜κ±°λ‚˜ ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ λ©€ν‹°μŠ€λ ˆλ”©μ΄ μ‚¬μš©λœλ‹€.

GUIλ₯Ό κ°–λŠ” μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ€ μ‚¬μš©μžκ°€ λ°œμƒμ‹œν‚€λŠ” eventλ₯Ό μ§€μ—° 없이 μ‹ μ†ν•˜κ²Œ 처리, μ‚¬μš©μžμ˜ μž…λ ₯에 μ΅œλŒ€ν•œ μ¦‰κ°μ μœΌλ‘œ λ°˜μ‘ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬ΈμΈλ°, μ—¬κΈ°μ„œ λ©€ν‹°μŠ€λ ˆλ”©μ΄ 큰 역할을 λ‹΄λ‹Ήν•˜κ²Œ λœλ‹€.

  • Multi-Processing이 μ•„λ‹Œ Multi-Threading을 μ‚¬μš©ν•˜λŠ” 이유?
    • μ΄λŠ” μŠ€λ ˆλ“œκ°€ ν”„λ‘œμ„ΈμŠ€λ³΄λ‹€ κ°€λ²Όμš΄ μ»¨ν…μŠ€νŠΈ μ „ν™˜μ„ κ°€λŠ₯ν•˜κ²Œ ν•˜κ³ , μŠ€λ ˆλ“œ κ°„ 데이터 κ΅ν™˜μ΄ 더 쉽기 λ•Œλ¬Έ

1. λ°˜μ‘μ„± μœ μ§€

GUI μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 메인 μŠ€λ ˆλ“œ (GUI Thread)λŠ” event loopλ₯Ό μ‹€ν–‰, μ‚¬μš©μžμ˜ μž…λ ₯을 μ²˜λ¦¬ν•˜κ³  화면을 μ—…λ°μ΄νŠΈ ν•œλ‹€.

λ§Œμ•½ 이 μŠ€λ ˆλ“œμ—μ„œ μ‹œκ°„μ΄ 였래 κ±Έλ¦¬λŠ” μž‘μ—…μ„ μ‹€ν–‰ν•˜λ©΄, GUIκ°€ 멈좰 λ³΄μ΄κ±°λ‚˜ β€œμ‘λ‹΅ μ—†μŒβ€ μƒνƒœκ°€ 될 수 있으며 μ΄λŠ” μ‚¬μš©μžμ—κ²Œ ν”„λ‘œκ·Έλž¨μ΄ μ •μƒμž‘λ™ν•˜λŠ”μ§€λ₯Ό ν™•μΈν•˜κΈ° μ–΄λ ΅κ²Œ λ§Œλ“€μ–΄ λ‚˜μœ UXλ₯Ό μ œκ³΅ν•˜κ²Œ λœλ‹€.

λ©€ν‹°μŠ€λ ˆλ”©μ„ μ‚¬μš©ν•˜λ©΄ 이처럼 μ‹œκ°„μ΄ 였래 κ±Έλ¦¬λŠ” μž‘μ—…μ„ λ³„λ„μ˜ μŠ€λ ˆλ“œμ—μ„œ 처리, 메인 μŠ€λ ˆλ“œ, 즉 메인 이벀트 루프가 μ›ν™œνžˆ λ™μž‘ν•˜λ„λ‘ ν•  수 μžˆλ‹€.

2. 효율적인 μžμ› μ‚¬μš©

ν˜„λŒ€μ˜ 컴퓨터 μ‹œμŠ€ν…œμ€ λŒ€λΆ€λΆ„ λ©€ν‹°μ½”μ–΄ ν”„λ‘œμ„Έμ„œλ₯Ό μ‚¬μš©ν•œλ‹€.

λ©€ν‹°μŠ€λ ˆλ”©μ„ 톡해 μ΄λŸ¬ν•œ λ©€ν‹°μ½”μ–΄ μ•„ν‚€ν…μ²˜μ˜ μž₯점을 μ΅œλŒ€ν•œ ν™œμš©ν•  수 μžˆλ‹€.

3. 비동기 μž‘μ—… μˆ˜ν–‰

λ„€νŠΈμ›Œν‚Ή, λŒ€μš©λŸ‰ 파일 처리, λ³΅μž‘ν•œ 계산 λ“±κ³Ό 같이 λΉ„λ™κΈ°μ μœΌλ‘œ μˆ˜ν–‰ν•˜λŠ” 것이 μ ν•©ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” GUI μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 경우, λ©€ν‹°μŠ€λ ˆλ”©μ„ μ‚¬μš©ν•˜λ©΄ μ΄λŸ¬ν•œ μž‘μ—…μ„ λ°±κ·ΈλΌμš΄λ“œμ—μ„œ μ‹€ν–‰ν•˜κ³  μ™„λ£Œ μƒνƒœλ₯Ό 메인 μŠ€λ ˆλ“œμ— μ•Œλ¦¬κ±°λ‚˜ κ²°κ³Όλ₯Ό μ „λ‹¬ν•˜λŠ” ꡬ쑰둜 κ΅¬ν˜„ν•  경우, μ‚¬μš©μž UX κ²½ν—˜μ΄ 크게 ν–₯μƒλœλ‹€.

4. νƒ€μž„μ•„μ›ƒ 및 μ·¨μ†Œ κ°€λŠ₯ν•œ μž‘μ—…

  • GUIμ—μ„œ μˆ˜ν–‰λ˜λŠ” μž‘μ—…μ΄ λ§Œμ•½ μ§€λ‚˜μΉ˜κ²Œ κΈ΄ μ‹€ν–‰ μ‹œκ°„μ„ μš”κ΅¬ν•˜λŠ” 경우
  • μ—¬λŸ¬ λ‹€λ₯Έ 이유둜 μ‚¬μš©μžκ°€ μ‹€ν–‰ 도쀑 μ·¨μ†Œν•΄μ•Ό ν•˜λŠ” 경우

λ©€ν‹°μŠ€λ ˆλ”©μ„ μ‚¬μš©ν•˜λŠ” 경우 μ΄λŸ¬ν•œ μž‘μ—…λ“€μ„ 더 잘 κ΄€λ¦¬ν•˜κ³ , ν•„μš”ν•œ 경우 μ‰½κ²Œ μ€‘λ‹¨μ‹œν‚¬ 수 μžˆλ‹€.

κ΅¬ν˜„ 방법

PySide6 μ—μ„œ λ©€ν‹°μŠ€λ ˆλ”©μ„ κ΅¬ν˜„ν•˜λŠ” 방법은 크게 두 κ°€μ§€κ°€ μžˆλ‹€.

  1. QThread 클래슀λ₯Ό ν†΅ν•œ κ΅¬ν˜„
  2. QRunnable κ³Ό QThreadPool 을 μ‚¬μš©ν•˜λŠ” 방법

Reference

PySide6 Threading κ΄€λ ¨ κΈ€