Trước khi tìm kiếm một công cụ "hộp đen", có thể được sử dụng để thực thi các hàm python "chung" song song, tôi sẽ đề nghị phân tích làm thế nào my_function()
có thể song song bằng tay.
Đầu tiên, so sánh thời gian thực hiện của chi phí vòng lặp my_function(v)
python for
: [C] Các for
vòng lặp Python khá chậm, vì vậy thời gian sử dụng my_function()
có thể không đáng kể.
>>> timeit.timeit('pass', number=1000000)
0.01692986488342285
>>> timeit.timeit('for i in range(10): pass', number=1000000)
0.47521495819091797
>>> timeit.timeit('for i in xrange(10): pass', number=1000000)
0.42337894439697266
Kiểm tra thứ hai nếu có một triển khai vectơ đơn giản my_function(v)
không yêu cầu các vòng lặp:F[:] = my_vector_function(X)
(Hai điểm đầu tiên này khá tầm thường, hãy tha thứ cho tôi nếu tôi đề cập đến chúng ở đây chỉ vì sự hoàn chỉnh.)
Thứ ba và hầu hết các điểm quan trọng, ít nhất là cho triển khai CPython, là để kiểm tra xem my_function
dành phần lớn thời gian của nó bên trong hoặc bên ngoài các khóa phiên dịch toàn cầu , hoặc GIL . Nếu thời gian được sử dụng ngoài GIL, thì nên sử dụng threading
mô-đun thư viện tiêu chuẩn . ( Đây là một ví dụ). BTW, người ta có thể nghĩ về việc viết my_function()
như một phần mở rộng C chỉ để phát hành GIL.
Cuối cùng, nếu my_function()
không giải phóng GIL, người ta có thể sử dụng multiprocessing
mô-đun .
Tài liệu tham khảo: Tài liệu Python về Thực thi đồng thời và giới thiệu numpy / scipy về xử lý song song .