Hướng dẫn how to loop a process in python - cách lặp một quy trình trong python
Bạn có thể thực thi một vòng lặp cho một hàm song song bằng cách tạo một phiên bản đa xử lý mới.multiprocessing.Process instance for each iteration. Show Trong hướng dẫn này, bạn sẽ khám phá cách thực hiện song song vòng lặp for bằng cách sử dụng đa xử lý trong Python.for-loop in parallel using multiprocessing in Python. Bắt đầu nào.
Cần một vòng lặp đồng thờiCách sử dụng đa xử lý cho vòng lặp Ví dụ về một vòng lặp cho vòng lặp
Đọc thêm Takeaways
# Thực hiện một tác vụ trong một vòng lặp for & nbsp; & nbsp; & nbsp; & nbsp;# thực hiện một số tác vụ Cách sử dụng đa xử lý cho vòng lặpVí dụ về một vòng lặp cho vòng lặpmultiprocessing.Process to create a parallel-for loop. Phiên bản vòng lặp tuần tự (chậm hơn)multiprocessing.Process class allows us to create and manage a new child process in Python. Song song cho phiên bản vòng lặp (nhanh hơn)Process instance and specifying the function to execute using the “target” argument in the class constructor. Hạn chế của việc tạo quy trình mỗi lần lặp
Hạn chế của việc tạo quy trình mỗi lần lặpstart() method to start the new child process and begin executing the target function in the child process. Hạn chế của việc tạo quy trình mỗi lần lặp
Hạn chế của việc tạo quy trình mỗi lần lặp
Takeaways Có lẽ một trong những cấu trúc phổ biến nhất trong lập trình là vòng lặp, chẳng hạn như vòng lặp.task(). Đó là, thực hiện cùng một nhiệm vụ với dữ liệu khác nhau cho đến khi một số điều kiện được đáp ứng, chẳng hạn như một số lần lặp cố định. Hạn chế của việc tạo quy trình mỗi lần lặp
Đọc thêmtask() function each iteration. Takeawaysargs” argument of the multiprocessing.Process constructor. Hạn chế của việc tạo quy trình mỗi lần lặp
Takeaways Có lẽ một trong những cấu trúc phổ biến nhất trong lập trình là vòng lặp, chẳng hạn như vòng lặp. Đó là, thực hiện cùng một nhiệm vụ với dữ liệu khác nhau cho đến khi một số điều kiện được đáp ứng, chẳng hạn như một số lần lặp cố định. ...
& nbsp; & nbsp; & nbsp; & nbsp;# thực hiện một số tác vụ Mỗi lần lặp của vòng lặp được thực hiện tuần tự, từng lần khác. Ví dụ về một vòng lặp cho vòng lặpĐiều này là tốt cho các vòng nhỏ với rất ít công việc để thực hiện từng lần lặp, nhưng trở thành một vấn đề khi có thể có một lượng lớn công việc để thực hiện từng lần lặp, chẳng hạn như:multiprocessing.Process to execute a for-loop in parallel. Mã hóa một video. Zipping một tập tin. Phiên bản vòng lặp tuần tự (chậm hơn)Phân tích một tài liệu. Khi các nhiệm vụ độc lập (hoặc chủ yếu là độc lập) và chậm thực hiện, chúng tôi muốn thực hiện chúng song song và sử dụng nhiều lõi CPU có sẵn trong các hệ thống hiện đại. Thứ nhất, chúng ta có thể phát triển chức năng nhiệm vụ. Hàm có một đối số số nguyên, tạo giá trị ngẫu nhiên, các khối sau đó báo cáo đối số được cung cấp và tạo giá trị ngẫu nhiên. Hàm nhiệm vụ () bên dưới thực hiện điều này.task() function below implements this.
Lưu ý, chúng tôi sẽ xóa rõ ràng bộ đệm đầu ra khi gọi print () bằng cách đặt flush = true.print() by setting flush=True. Điều này là bắt buộc khi gọi in trong các quy trình trẻ em, như chúng ta sẽ trong phần tiếp theo. Bạn có thể tìm hiểu thêm về việc xả chính xác bộ đệm đầu ra khi gọi in trong các quy trình con trong hướng dẫn:
Tiếp theo, chúng ta có thể gọi hàm này trong một vòng lặp với một số nguyên duy nhất từ 0 đến 19.
Tying này lại với nhau, ví dụ hoàn chỉnh được liệt kê dưới đây.
Tying này lại với nhau, ví dụ hoàn chỉnh được liệt kê dưới đây. # SuperfastPython.com # Thực hiện các tác vụ theo tuần tự trong một vòng lặp từ thời gian nhập vào giấc ngủ
.Done 16, được tạo 0,27891923055048506 .Done 17, tạo 0,9927804528392498.Done 18, tạo 0,9978627179624324 .Done 19, được tạo 0,9280287164497075multiprocessing.Process for each iteration of the loop to execute, specifying the function to execute and passing any arguments required. The processes can then be started to begin executing the tasks in parallel. The main process can then wait for all tasks to complete. Xong Tiếp theo, hãy để Lôi nhìn vào cách chúng ta có thể thực hiện song song vòng lặp.multiprocessing.Process instance for each iteration of the loop. Song song cho phiên bản vòng lặp (nhanh hơn)Process instances.
Không cần thay đổi chức năng đích.Process instances and start each in turn. Đầu tiên, chúng ta có thể tạo một phiên bản đa xử lý mới.
Đầu tiên, chúng ta có thể tạo một phiên bản đa xử lý mới. Điều này có thể được thực hiện trong một danh sách hiểu để cung cấp cho chúng tôi một danh sách các trường hợp quá trình.join() function on each Process instance. ...Process has terminated. By repeating this operation on each process in the list, it means that once we finish joining all processes it means all processes have terminated and our tasks are complete.
Nếu bạn chưa quen với các quy trình tham gia, hướng dẫn này sẽ giúp:
Sau đó chúng ta có thể báo hiệu rằng tất cả các công việc đã được hoàn thành thành công.
Tying này lại với nhau, ví dụ hoàn chỉnh được liệt kê dưới đây.
& nbsp; & nbsp; & nbsp; & nbsp;# báo cáo rằng tất cả các tác vụ được hoàn thànhmultiprocessing.Process instance for each call to the task() function we wish to execute. Chạy ví dụ trước tiên tạo một phiên bản đa xử lý. Quá trình chính sau đó bắt đầu các quy trình được tạo thực sự bắt đầu các quy trình con mới trong hệ điều hành cơ bản để thực hiện chức năng tác vụ trong mỗi quá trình. Quy trình chính sau đó chặn cho đến khi tất cả các nhiệm vụ được phát hành hoàn tất. Mỗi tác vụ tạo ra một số ngẫu nhiên, khối cho một phần nhỏ thứ hai, sau đó báo cáo một tin nhắn. Khi tất cả các nhiệm vụ đã hoàn thành và các quy trình con của họ đã thoát ra, quy trình chính báo cáo một thông điệp cuối cùng và chấm dứt. Chúng ta có thể thấy từ đầu ra của chương trình vì tất cả các tác vụ được thực hiện song song, họ báo cáo tin nhắn của họ ngay khi mỗi nhiệm vụ kết thúc. Điều này có nghĩa là các tin nhắn không có thứ tự so với ví dụ trước. Trên hệ thống của tôi, ví dụ hoàn thành trong khoảng 1,2 giây. Đó là nhanh hơn khoảng 8,5 giây hoặc nhanh hơn khoảng 8,08 lần so với phiên bản tuần tự trong phần trước.
Xong Khóa học đa xử lý Python miễn phí Tải xuống bảng cheat API đa xử lý của tôi và như một phần thưởng, bạn sẽ có quyền truy cập miễn phí vào khóa học email 7 ngày của tôi. Khám phá cách sử dụng mô -đun đa xử lý Python bao gồm cách tạo và bắt đầu các quá trình con và cách sử dụng khóa và semaphores. Tìm hiểu thêm & NBSP;Hạn chế của việc tạo quy trình mỗi lần lặp Trong ví dụ này, chúng tôi đã tạo ra 20 quy trình, một cho mỗi nhiệm vụ, mặc dù chúng tôi có thể có ít lõi CPU hơn trong hệ thống của chúng tôi. Lý tưởng nhất, chúng tôi sẽ tạo ra một nhiệm vụ cho mỗi CPU lõi trong hệ thống của chúng tôi hoặc có lẽ hai trên mỗi cốt lõi được đưa ra rằng CPU hiện đại cung cấp hyperthreading. Điều này có thể đạt được bằng cách thực hiện các nhiệm vụ theo lô cho đến khi tất cả các nhiệm vụ hoàn tất.
& nbsp; & nbsp; & nbsp; & nbsp;# báo cáo rằng tất cả các tác vụ được hoàn thànhmultiprocessing.Semaphore to ensure that only a fixed number of tasks could execute at a time. Một cách tiếp cận khác là sử dụng đa xử lý.Semaphore để đảm bảo rằng chỉ có một số tác vụ cố định có thể thực hiện tại một thời điểm.multiprocessing.Semaphore instance can be created in the main process, then provided to each task() function. The task must then acquire the semaphore before executing, ensuring a fixed number of tasks executed in parallel and the remainder waiting for a position to become available.
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;
Semaphore đa bộ xử lý trong pythonProcess instance each iteration. Một hạn chế khác là chúng ta phải tạo một phiên bản quy trình mới mỗi lần lặp.Process instances for each task and to maintain a pool of running worker processes, then provide tasks to the pool of workers as they become available. This is more efficient as we don’t have to continually create and destroy Process instances and it allows the number of concurrent workers to be limited to match the number of physical or logical CPU cores. Một cách tiếp cận tốt hơn là sử dụng lại các trường hợp quá trình cho từng nhiệm vụ và duy trì một nhóm quy trình công nhân đang điều hành, sau đó cung cấp các nhiệm vụ cho nhóm công nhân khi chúng có sẵn. Điều này hiệu quả hơn vì chúng tôi không phải liên tục tạo và phá hủy các trường hợp quá trình và nó cho phép số lượng nhân viên đồng thời bị giới hạn để khớp với số lượng lõi CPU vật lý hoặc logic.multiprocessing.Pool class which you can learn more about in this tutorial:
Nhóm đa xử lý trong Python: Hướng dẫn hoàn chỉnhĐọc thêm Phần này cung cấp các tài nguyên bổ sung mà bạn có thể thấy hữu ích.
PEP 371 - Bổ sung gói đa xử lý
Đa xử lý Python: Hướng dẫn hoàn chỉnh
Python Multiprocessing Jump-Start, Jason Brownlee, 2022 (cuốn sách của tôi!).
Xem: Chương: 14: Chủ đề và quy trìnhTakeawaysmultiprocessing.Process instance. Bây giờ bạn đã biết cách cập nhật một vòng lặp for để thực thi song song bằng cách sử dụng phiên bản đa xử lý. Bạn có câu hỏi nào không? Đặt câu hỏi của bạn trong các ý kiến dưới đây và tôi sẽ cố gắng hết sức để trả lời. |