Tôi phải thực hiện thao tác liên kết I/o nặng, ví dụ: Phân tích các tệp lớn và chuyển đổi từ một định dạng sang định dạng khác. Ban đầu tôi sử dụng để làm điều đó một cách serially, tức là phân tích cú pháp cái khác ..! Hiệu suất rất kém (nó được sử dụng mất 90 + giây). Vì vậy, tôi quyết định sử dụng luồng để cải thiện hiệu suất. Tôi đã tạo một chuỗi cho mỗi tệp. (4 chủ đề)luồng và hiệu suất của Python?
for file in file_list:
t=threading.Thread(target = self.convertfile,args = file)
t.start()
ts.append(t)
for t in ts:
t.join()
Nhưng thật ngạc nhiên, không có cải thiện hiệu suất nào. Bây giờ cũng phải mất khoảng 90 giây để hoàn thành nhiệm vụ. Vì đây là hoạt động liên kết I/o, tôi đã dự kiến sẽ cải thiện hiệu suất.
Cảm ơn delty..Nhưng mô-đun đa xử lý có vấn đề riêng của mình. 1) Tôi phải cấu trúc lại mã của mình vì tôi không thể sử dụng các phương thức ví dụ. 2) Tôi có một phương thức thể hiện có nhiều trình xử lý tập tin .. Trình xử lý tệp được đóng trong các tiến trình con không được chấp nhận. Vì vậy, tôi cần phải mở chúng một lần nữa. Thật không may tôi không có cách nào để biết chúng vì chúng được truyền trong quá trình instantiation – kumar
Nó không phải là chức năng chuyển đổi chính nó được thực hiện trong một quá trình riêng biệt. Có cách nào bạn có thể làm một phần instantiation trong các quá trình riêng biệt? Ví dụ. viết một hàm hoặc thậm chí là một tập lệnh riêng biệt để thực hiện một sự khởi tạo và chuyển đổi đơn lẻ; sau đó viết "tập lệnh chính" sử dụng mô-đun đa xử lý để chạy các chức năng này. Có thể chạy các tập lệnh riêng biệt bằng mô-đun [subprocess] (http://docs.python.org/library/subprocess.html). Nếu có rất nhiều dữ liệu được chia sẻ, thì có, đó là nơi đa xử lý trở nên phức tạp. Nhưng có nhiều công cụ hơn trong mô-đun đó :) – detly