Đa luồng Python với Queue



Nguyên văn bởi: Nguyen Van Hung nhóm Cộng đồng Auto C# Việt Nam trên Facebook. Cảm ơn bạn đã chia sẻ
Mình đăng lên đây để giữ bài viết cũng như chia sẻ đến các bạn.

Giới thiệu


Đa luồng là một kỹ thuật lập trình cho phép thực hiện nhiều luồng xử lý đồng thời, giúp tối ưu hóa hiệu suất chương trình. Trong Python, việc sử dụng các thư viện như threadingqueue sẽ giúp ta dễ dàng quản lý và sử dụng đa luồng.

Cách thức hoạt động


Trong ví dụ này, chúng ta sẽ sử dụng Queue để quản lý danh sách các công việc cần thực hiện. Các luồng sẽ lấy công việc từ hàng đợi này và thực hiện chúng một cách độc lập. Hàng đợi được thiết kế để đảm bảo an toàn khi sử dụng trong môi trường đa luồng, do đó không xảy ra xung đột dữ liệu.

Mã nguồn


Dưới đây là mã nguồn Python cho việc thực hiện đa luồng với hàng đợi:

import threading
import time
import random
from queue import Queue
# Tạo hàng đợi
jobs = Queue()
# Tạo một hàm để lấy dữ liệu từ hàng đợi
def do_stuff(q):
while not q.empty():
value = q.get()
# Giả lập thời gian xử lý ngẫu nhiên
time.sleep(random.randint(1, 10))
print(f"Xử lý giá trị: {value}")
q.task_done() # Đánh dấu công việc đã hoàn thành

# Gửi dữ liệu cần xử lý vào hàng đợi
for i in range(10):
jobs.put(i)

# Tạo 3 thread để xử lý dữ liệu trong hàng đợi
for i in range(3):
worker = threading.Thread(target=do_stuff, args=(jobs,))
worker.start()

print("Đang chờ hàng đợi hoàn tất với", jobs.qsize(), "công việc")
jobs.join() # Chờ cho đến khi tất cả công việc hoàn thành
print("Tất cả đã hoàn tất")

Giải thích mã



  • Hàng đợi (Queue): Dùng để lưu trữ các công việc cần xử lý. Các luồng sẽ lấy công việc từ hàng đợi này.

  • Hàm do_stuff: Hàm này lấy giá trị từ hàng đợi và giả lập việc xử lý trong khoảng thời gian ngẫu nhiên từ 1 đến 10 giây.

  • Gửi công việc vào hàng đợi: Chúng ta gửi 10 giá trị (0 đến 9) vào hàng đợi để các luồng xử lý.

  • Tạo các luồng: Tạo 3 luồng (threads) để xử lý dữ liệu từ hàng đợi.

  • Chờ hoàn tất: Sử dụng jobs.join() để chờ cho đến khi tất cả các công việc trong hàng đợi hoàn thành.



Kết luận


Đa luồng trong Python giúp cải thiện hiệu suất của chương trình bằng cách xử lý nhiều công việc đồng thời. Việc sử dụng hàng đợi giúp chúng ta quản lý công việc một cách hiệu quả và tránh xung đột dữ liệu. Hy vọng bài viết này sẽ hữu ích cho các bạn trong việc hiểu và áp dụng đa luồng trong Python!
Cùng Chuyên Mục

không có bài viết nào.

Close

Xem thêm
Comment Facebook