Tại sao đa luồng (multi-threading) không làm cho code Python của tôi chạy nhanh hơn? Làm thế nào để khắc phục điều này?
Python giới hạn quyền truy cập vào trình thông dịch bằng Global Interpreter Lock (GIL) để đảm bảo an toàn luồng nội bộ. Đáng tiếc là quyết định thiết kế này chỉ cho phép một luồng thông dịch code Python tại một thời điểm, ngay cả trên máy có khả năng chạy nhiều luồng cùng lúc.

Nếu bạn muốn chạy code Python trên một tập dữ liệu, và dữ liệu có thể được chia thành các phân đoạn độc lập (một quá trình gọi là phân vùng dữ liệu), bạn nên xem xét sử dụng thư viện multiprocessing trong Python.

Ví dụ, xét hàm foo nhận một đối số arg1, và giả sử bạn muốn chạy hàm foo trên một số giá trị, chẳng hạn val1, val2 và val3.

def foo(arg1):
  # thực hiện một việc gì đó

if __name__ == '__main__':
  foo(val1)
  foo(val2)
  foo(val3)

Để cho foo thực thi trên nhiều tiến trình cùng lúc, bạn có thể sử dụng Pool từ multiprocessing:

from multiprocessing import Pool

def foo(arg1):
  # thực hiện một việc gì đó

if __name__ == '__main__':
  p = Pool()
  p.map(foo, [val1, val2, val3])

Thư viện multiprocessing cũng cung cấp nhiều API khác nhau cho lập trình song song. Bạn có muốn tìm hiểu thêm không?