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.

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ời
  • Cá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
    • Phiên bản vòng lặp tuần tự (chậm hơn)
    • Song song cho phiên bản vòng lặp (nhanh hơn)
  • Hạn chế của việc tạo quy trình mỗi lần lặp
  • Đọc thêm
  • Takeaways

Cần một vòng lặp đồng thời

Cá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

Phiên bản vòng lặp tuần tự (chậm hơn)..

Song song cho phiên bản vòng lặp (nhanh hơn)

foriinrange(20):iinrange(20):

Hạn chế của việc tạo quy trình mỗi lần lặp# execute some task

Đọc thêm

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.
  • ...

# 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ặp

Ví 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

Phiên bản vòng lặp tuần tự (chậm hơn)..

Song song cho phiên bản vòng lặp (nhanh hơn)

process=Process(target=task)=Process(target=task)

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

Phiên bản vòng lặp tuần tự (chậm hơn)..

Song song cho phiên bản vòng lặp (nhanh hơn)

process.start().start()

Hạn chế của việc tạo quy trình mỗi lần lặp

  • Đọc thêm

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

Phiên bản vòng lặp tuần tự (chậm hơn)..

Song song cho phiên bản vòng lặp (nhanh hơn)

foriinrange(20):iinrange(20):

Hạn chế của việc tạo quy trình mỗi lần lặp# execute target function

    task(i)task(i)

Đọ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

Phiên bản vòng lặp tuần tự (chậm hơn)..

Song song cho phiên bản vòng lặp (nhanh hơn)

foriinrange(20):iinrange(20):

Hạn chế của việc tạo quy trình mỗi lần lặp# create a new process instance

    process=Process(target=task,args=(i,))process= Process(target=task,args=(i,))

Đọc thêm# start the process

    process.start()process.start()

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.

...

  • # 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ụ

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.
Download my FREE PDF cheat sheet

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.

# Thực hiện một tác vụ

nhiệm vụ def (arg):task(arg):

& nbsp; & nbsp; & nbsp; & nbsp;# tạo ra một giá trị ngẫu nhiên trong khoảng từ 0 đến 1# generate a random value between 0 and 1

    value=random()value=random()

& nbsp; & nbsp; & nbsp; & nbsp;# khối cho một phần nhỏ của một giây# block for a fraction of a second

    sleep(value)sleep(value)

& nbsp; & nbsp; & nbsp; & nbsp;# báo cáo một tin nhắn# report a message

& nbsp; & nbsp; & nbsp; & nbsp; print (f'.done {arg}, đã tạo {value} ', flush = true)print(f'.done {arg}, generated {value}',flush=True)

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:

  • Cách in () từ một quá trình trẻ em ở Python

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.

# Bảo vệ điểm vào

if__name__=='__main__':__name__=='__main__':

& nbsp; & nbsp; & nbsp; & nbsp;# chạy các tác vụ theo tuần tự# run tasks sequentially

    foriinrange(20):foriinrange(20):

        task(i)task(i)

    print('Done',flush=True)print('Done',flush=True)

Tying này lại với nhau, ví dụ hoàn chỉnh được liệt kê dưới đây.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

# 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ủtime import sleep

từ nhập ngẫu nhiên ngẫu nhiênrandom import random

# Thực hiện một tác vụ

nhiệm vụ def (arg):task(arg):

& nbsp; & nbsp; & nbsp; & nbsp;# tạo ra một giá trị ngẫu nhiên trong khoảng từ 0 đến 1# generate a random value between 0 and 1

    value=random()value=random()

& nbsp; & nbsp; & nbsp; & nbsp;# khối cho một phần nhỏ của một giây# block for a fraction of a second

    sleep(value)sleep(value)

& nbsp; & nbsp; & nbsp; & nbsp;# báo cáo một tin nhắn# report a message

& nbsp; & nbsp; & nbsp; & nbsp; print (f'.done {arg}, đã tạo {value} ', flush = true)print(f'.done {arg}, generated {value}',flush=True)

# Bảo vệ điểm vào

if__name__=='__main__':__name__=='__main__':

& nbsp; & nbsp; & nbsp; & nbsp;# chạy các tác vụ theo tuần tự# run tasks sequentially

    foriinrange(20):fori inrange(20):

        task(i)task(i)

    print('Done',flush=True)print('Done',flush=True)

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ủ

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

từ nhập ngẫu nhiên ngẫu nhiên

Chạy ví dụ thực thi hàm đích 20 lần trong một vòng lặp.

Mỗi lần lặp, một thông báo được báo cáo bao gồm số tác vụ và số ngẫu nhiên được tạo.

Trên hệ thống của tôi, ví dụ mất khoảng 9,7 giây để thực hiện.

Lưu ý, đầu ra của chương trình sẽ khác nhau mỗi khi chương trình được chạy do sử dụng các số ngẫu nhiên.

.Done 0, được tạo 0,259232667178327

.Done 1, được tạo 0,38789035599597854

.Done 2, được tạo 0,4429238296998014

.Done 3, được tạo 0,25616373394379677

.Done 4, được tạo 0,938552994424995

.Done 5, được tạo 0,4467664868139203

.Done 6, được tạo 0,7133623556037814

.Done 7, được tạo 0,8103247486692265

.Done 8, được tạo 0,4715292009220228

.Done 9, được tạo 0,09560488430855196

.Done 10, được tạo 0,5105330898226743

.Done 11, được tạo 0,1563419600953151

.Done 12, được tạo 0.16424534769120125

.Done 13, được tạo 0,0654927844143921

.Done 14, được tạo 0,436843770498672

.Done 15, tạo 0,19936852905258873

.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.

Chúng tôi có thể cập nhật phiên bản vòng lặp tuần tự ở trên để thực hiện từng lần lặp của vòng lặp trong một quy trình con mới...

Điều này có thể đạt được bằng cách trước tiên tạo một đa xử lý. Xử lý cho mỗi lần lặp của vòng lặp để thực thi, chỉ định hàm để thực thi và truyền bất kỳ đối số nào cần thiết. Các quy trình sau đó có thể được bắt đầu để bắt đầu thực hiện các nhiệm vụ song song. Quá trình chính sau đó có thể chờ tất cả các nhiệm vụ hoàn thành.

processes=[Process(target=task,args=(i,))foriinrange(20)]=[Process(target=task,args=(i,))foriin range(20)]

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.

Chúng tôi có thể cập nhật phiên bản vòng lặp tuần tự ở trên để thực hiện từng lần lặp của vòng lặp trong một quy trình con mới...

Điều này có thể đạt được bằng cách trước tiên tạo một đa xử lý. Xử lý cho mỗi lần lặp của vòng lặp để thực thi, chỉ định hàm để thực thi và truyền bất kỳ đối số nào cần thiết. Các quy trình sau đó có thể được bắt đầu để bắt đầu thực hiện các nhiệm vụ song song. Quá trình chính sau đó có thể chờ tất cả các nhiệm vụ hoàn thành.

Không cần thay đổi chức năng đích.process inprocesses:

    process.start()process.start()

Đầ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.

.....

# Đợi tất cả các quy trình hoàn thành

Nguyên tắc không điều trị:process inprocesses:

    process.join()process.join()

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:

  • Làm thế nào để tham gia một quá trình trong Python

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.

.....

# Báo cáo rằng tất cả các nhiệm vụ được hoàn thành

print('Done',flush=True)('Done',flush=True)

Tying này lại với nhau, ví dụ hoàn chỉnh được liệt kê dưới đây.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

# SuperfastPython.com

# Thực hiện các nhiệm vụ song song trong một vòng lặp cho vòng lặp

từ thời gian nhập vào giấc ngủtime import sleep

từ nhập ngẫu nhiên ngẫu nhiênrandom import random

Từ quá trình nhập bộ xử lý đa xử lýmultiprocessing import Process

# Thực hiện một tác vụ

nhiệm vụ def (arg):task(arg):

& nbsp; & nbsp; & nbsp; & nbsp;# tạo ra một giá trị ngẫu nhiên trong khoảng từ 0 đến 1# generate a random value between 0 and 1

    value=random()value=random()

& nbsp; & nbsp; & nbsp; & nbsp;# khối cho một phần nhỏ của một giây# block for a fraction of a second

    sleep(value)sleep(value)

& nbsp; & nbsp; & nbsp; & nbsp;# báo cáo một tin nhắn# report a message

& nbsp; & nbsp; & nbsp; & nbsp; print (f'.done {arg}, đã tạo {value} ', flush = true)print(f'.done {arg}, generated {value}',flush=True)

# Bảo vệ điểm vào

if__name__=='__main__':__name__=='__main__':

& nbsp; & nbsp; & nbsp; & nbsp;# tạo tất cả các tác vụ# create all tasks

    processes=[Process(target=task,args=(i,))foriinrange(20)]processes=[Process(target=task,args=(i,))foriin range(20)]

& nbsp; & nbsp; & nbsp; & nbsp;# Bắt đầu tất cả các quy trình# start all processes

& nbsp; & nbsp;forprocess inprocesses:

        process.start()process.start()

& nbsp; & nbsp; & nbsp; & nbsp;# chờ cho tất cả các quy trình hoàn thành# wait for all processes to complete

& nbsp; & nbsp;forprocess inprocesses:

        process.join()process.join()

& nbsp; & nbsp; & nbsp; & nbsp;# chờ cho tất cả các quy trình hoàn thành# report that all tasks are completed

    print('Done',flush=True)print('Done', flush=True)

& 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.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

Lưu ý, đầu ra của chương trình sẽ khác nhau mỗi khi chương trình được chạy do sử dụng các số ngẫu nhiên.

.Done 11, được tạo 0,01107997576551567

.Done 8, được tạo 0,041118656735705694

.Done 19, được tạo 0,07910007022893262

.Done 7, được tạo 0,28244029644892266

.Done 2, được tạo 0,31037342796826595

.Done 1, được tạo 0,42856475955180384

.Done 17, tạo 0,34081913523263097

.Done 0, được tạo 0,5519368862510039

.Done 15, được tạo 0,5125772350948196

.Done 16, được tạo 0,5014851525864039

.Done 4, được tạo 0,5932907711735493

.Done 13, được tạo 0,5442291501534473

.Done 14, được tạo 0,7127111612776107

.Done 12, được tạo 0,7724266976056693

.Done 18, tạo 0,7939959478751412

.Done 9, được tạo 0,847234816419922222

.Done 3, được tạo 0,9571907534245616

.Done 5, được tạo 0,9616059861410663

.Done 10, được tạo 0,9016934830388904

.Done 6, được tạo 0,9916324870990662


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.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

.....

# Bảo vệ điểm vào

if__name__=='__main__':__name__=='__main__':

& nbsp; & nbsp; & nbsp; & nbsp;# tạo tất cả các tác vụ# define batch size

    batch_size=5batch_size=5

& nbsp; & nbsp; & nbsp; & nbsp;# Bắt đầu tất cả các quy trình# execute in batches

    foriinrange(0,20,batch_size):foriinrange(0,20,batch_size):

& nbsp; & nbsp;# execute all tasks in a batch

        processes=[Process(target=task,args=(j,))forjinrange(i,i+batch_size)]processes =[Process(target=task,args=(j,))forjinrange(i, i+batch_size)]

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;# Bắt đầu# start all processes

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;forprocess inprocesses:

            process.start()process.start()

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;# wait for all processes to complete

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;forprocess inprocesses:

            process.join()process.join()

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;# report that all tasks are completed

    print('Done',flush=True)print('Done',flush=True)

& 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.

Ví dụ: một trường hợp đa xử lý.Semaphore có thể được tạo trong quy trình chính, sau đó được cung cấp cho mỗi hàm Task (). Sau đó, nhiệm vụ phải có được semaphore trước khi thực hiện, đảm bảo một số lượng tác vụ cố định được thực hiện song song và phần còn lại đang chờ một vị trí có sẵn.

# Thực hiện một tác vụtask(arg,shared_semaphore):

Nhiệm vụ def (arg, shared_semaphore):# acquire the semaphore

& nbsp; & nbsp; & nbsp; & nbsp;# có được semaphorewith shared_semaphore:

& nbsp; & nbsp; & nbsp; & nbsp; với chia sẻ_semaphore:# generate a random value between 0 and 1

        value=random()value=random()

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;# block for a fraction of a second

        sleep(value)sleep(value)

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;# report a message

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;print(f'.done {arg}, generated {value}',flush=True)

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;

  • Bạn có thể tìm hiểu thêm về cách sử dụng semaphore trong hướng dẫn:

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:

  • Đây được gọi là nhóm quy trình và được cung cấp thông qua lớp Multiprocessing.pool mà bạn có thể tìm hiểu thêm về hướng dẫn này:

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.

  • API
  • Đa xử lý-song song dựa trên quy trình

PEP 371 - Bổ sung gói đa xử lý

  • Hướng dẫn

Đa xử lý Python: Hướng dẫn hoàn chỉnh

  • Sách
  • Tờ Cheat API mô -đun đa xử lý
  • Câu hỏi phỏng vấn API đa xử lýmy book!).

Python Multiprocessing Jump-Start, Jason Brownlee, 2022 (cuốn sách của tôi!).

  • Tôi cũng muốn giới thiệu các chương cụ thể trong các cuốn sách:
    • Python hiệu quả, Brett Slatkin, 2019.
  • Xem: Chương 7: Đồng thời và song song
    • Python hiệu suất cao, Ian Ozsvald và Micha Gorelick, 2020.
  • Xem: Chương 9: Mô -đun đa xử lý
    • Python trong A Nutshell, Alex Martelli, et al., 2017.

    Xem: Chương: 14: Chủ đề và quy trình

    Takeawaysmultiprocessing.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ý.
    Ask your questions in the comments below and I will do my best to answer.

    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.