2014-10-17 22 views
21

tôi làm dự án học máy bằng Python, vì vậy tôi phải song song với dự đoán chức năng, mà tôi đang sử dụng trong chương trình của tôi.multiprocessing.dummy bằng Python không sử dụng 100% CPU

from multiprocessing.dummy import Pool 
from multiprocessing import cpu_count 


def multi_predict(X, predict, *args, **kwargs): 
    pool = Pool(cpu_count()) 
    results = pool.map(predict, X) 
    pool.close() 
    pool.join() 
    return results 

Vấn đề là tất cả CPU của tôi chỉ tải trên 20-40% (tổng cộng là 100%). Tôi sử dụng multiprocessing.dummy vì tôi có một số vấn đề với mô đun đa xử lý trong chức năng tẩy.

Trả lời

43

Khi bạn sử dụng multiprocessing.dummy, bạn đang sử dụng đề, chứ không phải quá trình:

multiprocessing.dummy tái tạo API của multiprocessing nhưng là hơn không hơn một wrapper xung quanh các mô-đun threading.

Điều đó có nghĩa là bạn bị giới hạn bởi Global Interpreter Lock (GIL) và chỉ một chủ đề thực sự có thể thực thi các hoạt động liên kết CPU tại một thời điểm. Điều đó sẽ giúp bạn không sử dụng đầy đủ các CPU của mình. Nếu bạn muốn có được song song đầy đủ trên tất cả các lõi có sẵn, bạn sẽ cần phải giải quyết vấn đề tẩy bạn đang đánh với multiprocessing.Pool.

Lưu ý rằng multiprocessing.dummy vẫn có thể hữu ích nếu công việc bạn cần song song là IO bị ràng buộc hoặc sử dụng phần mở rộng C giải phóng GIL. Tuy nhiên, đối với mã Python thuần túy, bạn sẽ cần multiprocessing.

+0

Hoặc sử dụng triển khai Python không dựa trên GIL như Jython hoặc IronPython ... hoặc nhập phiên bản GIL-less STM của PyPy từ năm 2015. :) – abarnert

+14

[Chủ đề Python là chủ đề hệ điều hành thực: chúng có thể chạy song song (nếu có có nhiều lõi CPU). Chỉ có mã Python thuần túy bị giới hạn bởi GIL. Các phần mở rộng của C như 'lxml',' regex', 'numpy' có thể làm và giải phóng GIL và do đó một số luồng có thể chạy song song.] (Http://stackoverflow.com/questions/26234301/synchronise-muti-threads -in-python # comment41151656_26234761) – jfs

+0

@jfs Vậy tại sao nó không hoạt động cho OP? – endolith

Các vấn đề liên quan