An toàn luồng trong python 2024

Xem An toàn luồng trong python 2024

Bạn có thể tạo một danh sách toàn chủ đề bằng cách sử dụng từ khóa loại trừ lẫn nhau (MUTEX) thông qua Threading lớp. Khóa. danh sách an toàn luồng bằng cách sử dụng khóa loại trừ lẫn nhau (mutex) thông qua luồng. khóa lớp

Nội dung chính Hiển thị

    Trong hướng dẫn này, bạn sẽ khám phá cách phát triển một danh sách toàn chủ đề trong Python

    Started any

    • Cần liệt kê một chủ đề toàn bộ
    • Hầu hết các danh sách hoạt động là nguyên tử
    • Hoạt động danh sách nguyên tử rất dễ bị phá vỡ
    • Cách phát triển danh sách toàn chủ đề
    • Ví dụ về danh sách toàn chủ đề
    • Thay thế cho một danh sách toàn chủ đề
    • Ví dụ về việc sử dụng hàng đợi an toàn chủ đề
    • Đọc thêm
    • mang đi

    Cần liệt kê một chủ đề toàn bộ

    Hầu hết các danh sách hoạt động là nguyên tử

    Hoạt động danh sách nguyên tử rất dễ bị phá vỡ

    Cách phát triển danh sách toàn chủ đề

    Ví dụ về phân luồng chủ đề danh sách. lớp chủ đề

    Thay thế cho một danh sách toàn chủ đề

    • Ví dụ về việc sử dụng hàng đợi an toàn chủ đề

    Đọc thêm

    mang đi

    Một chủ đề là một chủ đề thực thi trong một chương trình máy tính

    Hầu hết các danh sách hoạt động là nguyên tử

    Hoạt động danh sách nguyên tử rất dễ bị phá vỡ

    Cách phát triển danh sách toàn chủ đềDanh sách lớp

    Ví dụ về danh sách toàn chủ đề

    Thay thế cho một danh sách toàn chủ đề

    Ví dụ về việc sử dụng hàng đợi an toàn chủ đề

    Đọc thêm

    Đặc biệt

    • Takeawaysappend()
    • Một chủ đề là một chủ đề thực thi trong một chương trình máy tính. gia hạn()
    • Mỗi chương trình Python có ít nhất một luồng thực thi được gọi là luồng chính. Cả hai quy trình và luồng được tạo và quản lý bởi hệ điều hành cơ bản
    • Đôi khi chúng ta có thể cần tạo các luồng bổ sung trong chương trình của chúng ta để thực hiện mã đồng thời. []
    • Python cung cấp khả năng tạo và quản lý các luồng mới thông qua mô-đun luồng và luồng lớp. nhạc pop()
    • Bạn có thể tìm hiểu thêm về các chủ đề Python trong hướng dẫn. loại()

    Chủ đề trong Python. Hướng dẫn hoàn chỉnh

    • Trong việc lập trình đồng thời, chúng ta có thể cần chia sẻ cấu trúc dữ liệu danh sách cấu trúc giữa các luồng

    Nhiều luồng có thể cần kết nối dữ liệu vào cùng một danh sách, các luồng khác có thể muốn xóa các mục hoặc kiểm tra độ dài của danh sách

    Là danh sách an toàn trong Python và nếu không, làm thế nào chúng ta có thể làm cho nó an toàn?

    Nhiều biến hoạt động phổ biến trong danh sách là nguyên tử, có nghĩa là chúng an toàn cho luồng

    Nhớ lại, một danh sách là một ví dụ của lớp danh sách.
    Tải xuống bảng cheat PDF MIỄN PHÍ của tôi

    Hoạt động danh sách nguyên tử rất dễ bị phá vỡ

    Cách phát triển danh sách toàn chủ đề

    Ví dụ về danh sách toàn chủ đề

    • Thay thế cho một danh sách toàn chủ đề
    • Ví dụ về việc sử dụng hàng đợi an toàn chủ đề
    • Đọc thêm

    mang đi

    Một chủ đề là một chủ đề thực thi trong một chương trình máy tính

    Mỗi chương trình Python có ít nhất một luồng thực thi được gọi là luồng chính. Cả hai quy trình và luồng được tạo và quản lý bởi hệ điều hành cơ bản

    Đôi khi chúng ta có thể cần tạo các luồng bổ sung trong chương trình của chúng ta để thực hiện mã đồng thời

    Python cung cấp khả năng tạo và quản lý các luồng mới thông qua mô-đun luồng và luồng lớp

    Bạn có thể tìm hiểu thêm về các chủ đề Python trong hướng dẫn

    Đọc thêm

    mang đi


    Một chủ đề là một chủ đề thực thi trong một chương trình máy tính

    Mỗi chương trình Python có ít nhất một luồng thực thi được gọi là luồng chính. Cả hai quy trình và luồng được tạo và quản lý bởi hệ điều hành cơ bản

    Đôi khi chúng ta có thể cần tạo các luồng bổ sung trong chương trình của chúng ta để thực hiện mã đồng thời

    Python cung cấp khả năng tạo và quản lý các luồng mới thông qua mô-đun luồng và lớp luồng.
     


    Cách phát triển danh sách toàn chủ đề

    Ví dụ về danh sách toàn chủ đề

    Thay thế cho một danh sách toàn chủ đề

    Ví dụ về việc sử dụng hàng đợi an toàn chủ đề

    A could show of stream. lock could be used to protect the list. xâu chuỗi. Khóa có thể được sử dụng để bảo vệ danh sách

    Bạn có thể tìm hiểu thêm về khóa Mutex tại đây

    • Cách sử dụng từ khóa mutex trong Python

    Khóa này phải được mua trước khi hoạt động trong danh sách và được phát hành khi hoạt động trong danh sách đã hoàn thành

    Ví dụ

    . .

    # has been started

    khóa. thu được(). có được()

    # active in the list

    . .

    # has been started

    khóa. phát hành(). phát hành()

    # active in the list

    # Phát hành khóa

    Ví dụ

    . .

    # has been started

    # hoạt động trong danh sáchkhóa.

    # active in the list

    . .

    # has been started

    # active in the list

    # Phát hành khóathreading. lớp RLock. Nó sẽ cho phép lấy lại khóa bởi cùng một luồng

    Điều này đảm bảo rằng chỉ có một luồng tại một thời điểm có thể hoạt động trong danh sách

    • Giao diện Trình quản lý cảnh báo trên khóa có thể được sử dụng để đơn giản hóa thao tác này, cho phép khóa được giải phóng tự động

    with key

    Điều này bổ sung thêm chi phí, làm cho mỗi hoạt động có danh sách chậm hơn nhiều so với nếu không có khóa. Lợi ích là tin rằng các điều kiện chủng tộc với danh sách đã được loại bỏ hoàn toàn. Liệt kê lớp và triển khai các phiên bản an toàn cho luồng của tất cả hoặc một tập hợp con các hàm

    Nếu thiết kế của bạn có một số chức năng được bọc, hãy gọi các chức năng được bọc khác, thì từ khóa reentrant được ưa thích, để tránh bế tắc. Liệt kê lớp, ngoại trừ các chức năng trên lớp là chủ đề an toàn

    Điều này có thể đạt được thông qua Threading lớp. ổ khóa. Nó sẽ cho phép khóa được thu bởi cùng một luồng một lần nữa. Danh sách lớp

    Bạn có thể tìm hiểu thêm về reentrant key tại đây. Danh sách an toàn cho luồng, đây là cấu trúc dữ liệu được thiết kế cho trường hợp sử dụng an toàn cho luồng phải được xử lý hết sức cẩn thận

    Cách sử dụng khóa Reentrant trong PythonThreadSafeList

    Hãy phát triển một lớp kết thúc một số hoạt động danh sách biến phổ biến theo cách an toàn cho luồng

    classThreadSafeList(). Danh sách ThreadSafe().

    Một cách tiếp cận sẽ là ghi đè lên các lớp Danh sách và khai thác các phiên bản an toàn luồng của tất cả hoặc một tập hợp con của các chức năng

    Một cách tiếp cận khác là xác định một lớp mới có cùng giao diện với lớp Danh sách, ngoại trừ các chức năng trên lớp là toàn bộ cho luồng

    Cách tiếp cận cuối cùng là xác định một lớp mới với các hoạt động giống như danh sách, không thể giống với giao diện của lớp Danh sách

    Tôi thích cách tiếp cận thứ hai để làm rõ người dùng của lớp rằng họ đang làm việc với một cái gì đó khác biệt. Nó không phải là một sự thay thế các khe cắm cho toàn bộ danh sách, nó là một cấu trúc dữ liệu được thiết kế cho một trường hợp sử dụng toàn bộ luồng phải được quản lý theo một cách cực kỳ chăm sóc. __init__(bản thân).

    Đầu tiên, chúng ta có thể xác định lớp với một tên rõ ràng như ThreadSafelist. # khởi tạo danh sách

        bản thân. _list=list()bản thân. _list=danh sách()

    # lớp tùy chỉnh gói danh sách để làm cho nó an toàn# khởi tạo khóa

        bản thân. _lock=Lock()self. _lock =Khóa()

    #

    Tiếp theo, chúng ta có thể xác định một hàm khởi động để tạo cả danh sách bộ nội dung và khóa được sử dụng để bảo vệ danh sách dưới dạng các biến thể hiện trên lớp

    • # người xây dựngappend()
    • def __init __ (tự). nhạc pop()
    •  
    •  

    Tiếp theo, chúng ta có thể bắt đầu thêm chức năng mà chúng ta có thể cần trong ứng dụng của mình

    Trong trường hợp này, chúng tôi sẽ cung cấp các hoạt động trong danh sách

    Add a value information through append()

    Delete and return a value through pop()

    Truy cập nhật giá trị tại một mục thông tin duy nhất qua get (). nối thêm(bản thân,giá trị . ):

    Nhận độ dài của danh sách thông qua độ dài (). # giành được khóa

    Place thao tác trong danh sách sẽ bị khóa bởi từ khóa bằng giao diện Trình quản lý ngữ cảnh. với chính mình. _khóa.

    Giao diện trình quản lý cảnh bảo được ưa thích như một hoạt động trong danh sách có thể gây ra lỗi (ví dụ:. chỉ mục ra khỏi giới hạn) và chúng tôi cần đảm bảo rằng từ khóa sẽ luôn được phát triển, bất kể thành công hay thất bại của hoạt động. # nối thêm giá trị

            bản thân. _danh sách. append(value)self. _list. chắp thêm(giá trị)

    Ví dụ. method for active subhell đượ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

    # Add value to list

    def tiêu (tự, giá trị). bốp(chính mình).

    Nhận độ dài của danh sách thông qua độ dài (). # giành được khóa

    Place thao tác trong danh sách sẽ bị khóa bởi từ khóa bằng giao diện Trình quản lý ngữ cảnh. với chính mình. _khóa.

    Giao diện trình quản lý cảnh bảo được ưa thích như một hoạt động trong danh sách có thể gây ra lỗi (ví dụ:. chỉ mục ra khỏi giới hạn) và chúng tôi cần đảm bảo rằng từ khóa sẽ luôn được phát triển, bất kể thành công hay thất bại của hoạt động. # bật một giá trị từ danh sách

            tự trả lại. _danh sách. pop()return self. _list. bật()

    Ví dụ. method for active subhell được liệt kê dưới đây

    # Add value into listget(self,index):

    Nhận độ dài của danh sách thông qua độ dài (). # giành được khóa

    Place thao tác trong danh sách sẽ bị khóa bởi từ khóa bằng giao diện Trình quản lý ngữ cảnh. với chính mình. _khóa.

    Giao diện trình quản lý cảnh bảo được ưa thích như một hoạt động trong danh sách có thể gây ra lỗi (ví dụ:. chỉ mục ra khỏi giới hạn) và chúng tôi cần đảm bảo rằng từ khóa sẽ luôn được phát triển, bất kể thành công hay thất bại của hoạt động. # đọc giá trị tại chỉ mục

            tự trả lại. _list[index]returnself. _list[index]

    Ví dụ. method for active subhell được liệt kê dưới đây

    # Add value into listlength(self):

    Nhận độ dài của danh sách thông qua độ dài (). # giành được khóa

    Place thao tác trong danh sách sẽ bị khóa bởi từ khóa bằng giao diện Trình quản lý ngữ cảnh. với chính mình. _khóa.

            returnlen(self. _list)returnlen(self._list)

    Giao diện quản lý cảnh bảo được ưa thích như một hoạt động trong danh sách có thể gây ra lỗi (ví dụ:. chỉ mục ra khỏi giới hạn) và chúng tôi cần đảm bảo rằng từ khóa sẽ luôn được phát triển, bất kể thành công hay thất bại của hoạt động

    Ví dụ. method for active subhell được liệt kê dưới đây

    # Add value to list

    def expend (count, value)

    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

    28

    29

    30

    31

    32

    33

    34

    35

    # lớp tùy chỉnh gói danh sách để làm cho nó an toàn

    classThreadSafeList(). Danh sách ThreadSafe().

    & nbsp; # constructor

    & nbsp; . def __init__(self) . :

      # initialize the list

            bản thân. _list=list()bản thân. _list=danh sách()

      # initialize the lock

            bản thân. _lock=Lock()self. _lock= Khóa()

    & nbsp; # add a value to the list

      . def append(self, . value):

      # acquire the lock

      . with self._khóa.

      # append the value

                 chính bạn. _danh sách. append(value)self. _list. chắp thêm(giá trị)

    & nbsp; # remove and return the last value from the list

      . def pop(self) . :

      # acquire the lock

      . with self._khóa.

      # pop a value from the list

                 returnself. _danh sách. pop()returnself. _list. bật()

    & nbsp; # read a value from the list at an index

      . def get(self, . index):

      # acquire the lock

      . with self._khóa.

      # read a value at the index

                 returnself. _list[index]return self. _list[index]

    & nbsp; # return the number of items in the list

      . def độ dài(bản thân) . :

      # acquire the lock

      . with self._khóa.

                 returnlen(self. _list)returnlen(self._list)

     

     

     

     

     

     

     

     

      . ThreadSafeList, sau đó lặp 100.000 lần, thêm một giá trị vào danh sách mỗi lần lặp

    Là một tiện ích mở rộng tiện ích, hãy thử thêm một số hoạt động bổ sung mà bạn muốn sử dụng trong danh sách của mình như Sort () và Extend (). hàm add_items() bên dưới thực hiện điều này

    Ngoài ra, hãy cố gắng thêm một số hoạt động liên quan đến các hoạt động tổng hợp trong danh sách, chẳng hạn như chỉ mục () hoặc sau này ()

    Tiếp theo, hãy để Lừa trình diễn ra một chủ đề toàn bộ danh sách trong một ví dụ đang làm việc. add_items(safe_list).

        foriinrange(100000). choitrongphạm vi( . 100000):

            safe_list. append(i)safe_list. chắp thêm(i)

    Ví dụ về danh sách toàn chủ đề

    Chúng ta có thể phát triển một ví dụ về công việc sử dụng danh sách toàn bộ luồng từ nhiều luồng. . .

    Trong ví dụ này, chúng tôi sẽ tạo ra mười luồng và mỗi chủ đề sẽ cố gắng thêm 100. 000 mục vào danh sách đồng thời. Kết quả dự kiến ​​sẽ là một danh sách với 1. 000. 000 mặt hàng

    safe_list=ThreadSafeList()=ThreadSafeList()

    Một lần nữa, điều này có thể đạt được với danh sách Python mặc định bằng phiên bản hiện tại (v3. 10) tham chiếu của thông tin trình dịch Python, nhưng nó có thể hoặc không phải là bằng chứng trong tương lai cho các thay đổi trong trình thông dịch. Do đó, chúng tôi sẽ sử dụng lớp danh sách một chủ đề toàn chủ đề mà chúng tôi đã phát triển trong phần trước. add_items() và được truyền cùng một ThreadSafeList làm đối số

    Đầu tiên, chúng ta có thể xác định một chức năng được thực hiện bởi mỗi luồng công nhân

    Chúng ta có thể phát triển một ví dụ về công việc sử dụng danh sách toàn bộ luồng từ nhiều luồng. . .

    Trong ví dụ này, chúng tôi sẽ tạo ra mười luồng và mỗi chủ đề sẽ cố gắng thêm 100. 000 mục vào danh sách đồng thời. Kết quả dự kiến ​​sẽ là một danh sách với 1. 000. 000 mặt hàng

    threads=[Thread(target=add_items,args=(safe_list,))foriinrange(10)]=[Thread(target=add_items,args=(safe_list,))fori inrange(10)]

    Một lần nữa, điều này có thể đạt được với danh sách Python mặc định bằng phiên bản hiện tại (v3. 10) tham chiếu của thông tin trình dịch Python, nhưng nó có thể hoặc không phải là bằng chứng trong tương lai cho các thay đổi trong trình thông dịch. Do đó, chúng tôi sẽ sử dụng lớp danh sách một chủ đề toàn chủ đề mà chúng tôi đã phát triển trong phần trước

    Chúng ta có thể phát triển một ví dụ về công việc sử dụng danh sách toàn bộ luồng từ nhiều luồng. . .

    Trong ví dụ này, chúng tôi sẽ tạo ra mười luồng và mỗi chủ đề sẽ cố gắng thêm 100. 000 mục vào danh sách đồng thời. Kết quả dự kiến ​​sẽ là một danh sách với 1. 000. 000 mặt hàng

    Một lần nữa, điều này có thể đạt được với danh sách Python mặc định bằng phiên bản hiện tại (v3. 10) tham chiếu của thông tin trình dịch Python, nhưng nó có thể hoặc không phải là bằng chứng trong tương lai cho các thay đổi trong trình thông dịch. Do đó, chúng tôi sẽ sử dụng lớp danh sách một chủ đề toàn chủ đề mà chúng tôi đã phát triển trong phần trước. chuỗi trongchuỗi.

        chủ đề. start()chuỗi. bắt đầu()

    Đầu tiên, chúng ta có thể xác định một chức năng được thực hiện bởi mỗi luồng công nhân

    Chúng ta có thể phát triển một ví dụ về công việc sử dụng danh sách toàn bộ luồng từ nhiều luồng. . .

    Trong ví dụ này, chúng tôi sẽ tạo ra mười luồng và mỗi chủ đề sẽ cố gắng thêm 100. 000 mục vào danh sách đồng thời. Kết quả dự kiến ​​sẽ là một danh sách với 1. 000. 000 mặt hàng

    Một lần nữa, điều này có thể đạt được với danh sách Python mặc định bằng phiên bản hiện tại (v3. 10) tham chiếu của thông tin trình dịch Python, nhưng nó có thể hoặc không phải là bằng chứng trong tương lai cho các thay đổi trong trình thông dịch. Do đó, chúng tôi sẽ sử dụng lớp danh sách một chủ đề toàn chủ đề mà chúng tôi đã phát triển trong phần trước. (‘Main chờ chủ đề. ‘)

    Một lần nữa, điều này có thể đạt được với danh sách Python mặc định bằng phiên bản hiện tại (v3. 10) tham chiếu của thông tin trình dịch Python, nhưng nó có thể hoặc không phải là bằng chứng trong tương lai cho các thay đổi trong trình thông dịch. Do đó, chúng tôi sẽ sử dụng lớp danh sách một chủ đề toàn chủ đề mà chúng tôi đã phát triển trong phần trước. chuỗi trongchuỗi.

        chủ đề. tham gia()chuỗi. tham gia()

    Đầu tiên, chúng ta có thể xác định một chức năng được thực hiện bởi mỗi luồng công nhân

    Chúng ta có thể phát triển một ví dụ về công việc sử dụng danh sách toàn bộ luồng từ nhiều luồng. . .

    Trong ví dụ này, chúng tôi sẽ tạo ra mười luồng và mỗi chủ đề sẽ cố gắng thêm 100. 000 mục vào danh sách đồng thời. Kết quả dự kiến ​​sẽ là một danh sách với 1. 000. 000 mặt hàng

    Một lần nữa, điều này có thể đạt được với danh sách Python mặc định bằng phiên bản hiện tại (v3. 10) tham chiếu của thông tin trình dịch Python, nhưng nó có thể hoặc không phải là bằng chứng trong tương lai cho các thay đổi trong trình thông dịch. Do đó, chúng tôi sẽ sử dụng lớp danh sách một chủ đề toàn chủ đề mà chúng tôi đã phát triển trong phần trước. (f‘Kích thước danh sách. {safe_list. độ dài()}’)

    Đầu tiên, chúng ta có thể xác định một chức năng được thực hiện bởi mỗi luồng công nhân

    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

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    #Trăn Siêu Nhanh. com

    # Ví dụ về danh sách toàn chủ đề

    từ luồng nhập luồngluồng nhập Luồng

    từ khóa nhập khẩu renluồng nhập Khóa

    # lớp tùy chỉnh gói danh sách để làm cho nó an toàn

    classThreadSafeList(). Danh sách ThreadSafe().

    & nbsp; # constructor

    & nbsp; . def __init__(self) . :

      # initialize the list

            bản thân. _list=list()bản thân. _list=danh sách()

      # initialize the lock

            bản thân. _lock=Lock()self. _lock=Khóa()

    & nbsp; # add a value to the list

      . def append(self, . value):

      # acquire the lock

      . with self._khóa.

      # append the value

                 chính bạn. _danh sách. append(value)self. _list. chắp thêm(giá trị)

    & nbsp; # remove and return the last value from the list

      . def pop(self) . :

      # acquire the lock

      . with self._khóa.

      # pop a value from the list

                 returnself. _danh sách. pop()returnself. _list. bật()

    & nbsp; # read a value from the list at an index

      . def get(self, . index):

      # acquire the lock

      . with self._khóa.

      # read a value at the index

                 returnself. _list[index]return self. _list[index]

    & nbsp; # return the number of items in the list

      . def độ dài(bản thân) . :

      # acquire the lock

      . with self._khóa.

                 returnlen(self. _list)returnlen(self._list)

     

    & nbsp; . add_items(safe_list):

        foriinrange(100000). cho itrongphạm vi( . 100000):

            safe_list. append(i)safe_list. chắp thêm(i)

     

    safe_list=ThreadSafeList()=ThreadSafeList()

     

    threads=[Thread(target=add_items,args=(safe_list,))foriinrange(10)]=[Thread(target=add_items,args=(safe_list,))foriin range(10)]

     

      . chuỗi trongchuỗi.

        chủ đề. start()chuỗi. bắt đầu()

     

    & nbsp; . ‘(‘Main waiting for threads…’)

      . chuỗi trongchuỗi.

        chủ đề. tham gia()chuỗi. tham gia()

     

    & nbsp; . {safe_list. độ dài()}’(f‘List size: {safe_list.length()}’)

     

    # Thêm các mục vào danh sách

    def add_items (toàn_danh sách)

    # Tạo danh sách toàn chủ đề Lớp ThreadSafeList có thể là thêm chức năng để một luồng có thể lấy khóa một lần và thêm nhiều mục vào danh sách hàng loạt

    # Định cấu hình các luồng để thêm vào danh sách

    # Bắt đầu chủ đề

    chủ đề hướng tới chủ đề

    # Chờ tất cả các luồng kết thúc

    in (‘Chờ các chủ đề chính. ‘)

    # Báo cáo số lượng mục trong danh sách

    in (size f’list. {an_list. chiều dài ()} ‘)

    Chạy ví dụ đầu tiên để tạo ra một danh sách có thể hiển thị toàn bộ luồng của chúng tôi, bộ nội dung xác định một danh sách mới có thể hiển thị và khóa để bảo vệ danh sách

    Sau đó, chúng tôi định cấu hình và bắt đầu mười luồng, mỗi chủ đề rất cố gắng thêm 100. 000 mục vào danh sách

    Mỗi cuộc gọi để kết nối () trên danh sách toàn bộ luồng được bảo vệ bởi từ khóa, đảm bảo rằng chỉ có một luồng có thể thêm một mục vào danh sách tại một thời điểm

    Một tiến trình cải tiến hữu ích cho lớp ThreadSafelist có thể là thêm một hàm để một luồng có thể lấy khóa một lần và thêm nhiều mục vào danh sách theo đợt. mô-đun hàng đợi, chẳng hạn như hàng đợi. Hàng đợi và hàng đợi. các lớp SimpleQueue

    Chặn luồng chính cho đến khi tất cả mười luồng mới chấm dứt. xếp hàng. Lớp hàng đợi được thiết kế đặc biệt để đảm bảo an toàn cho luồng trong môi trường lập trình đồng thời

    Cuối cùng, tất cả các chủ đề kết thúc việc bổ sung các mục của họ, các luồng chính bị chặn và báo cáo độ dài của danh sách. xếp hàng. lớp xếp hàng

    . .

    # Tạo hàng đợi cho toàn bộ chủ đề

    queue=queue. Hàng đợi()=hàng đợi. Hàng đợi()

    Chúng ta có thể thêm các mục vào hàng đợi theo cách an toàn chủ đề bằng cách sử dụng hàm put (). hàm put()

    Ví dụ

    . .

    # Add a item into queue theo cách an toàn cho luồng

    hàng đợi. đặt(mục). đặt(mục)

    Chúng ta có thể xóa các mục khỏi hàng đợi theo cách an toàn luồng bằng cách sử dụng hàm get(). hàm get()

    Ví dụ

    . .

    # Add a item into queue theo cách an toàn cho luồng

    item=queue. get()=hàng đợi. nhận()

    Chúng ta có thể xóa các mục khỏi hàng đợi theo cách an toàn luồng bằng cách sử dụng hàm get()

    # Nhận mục tiếp theo từ hàng đợi theo cách an toàn chủ đề mô-đun và lớp

    Các lớp chờ đợi này được thiết kế để nhanh chóng, các đối tượng hóa cách cấu trúc được giữ an toàn cho các chủ đề khi thực hiện theo cách nhanh nhất và phù hợp nhất cho phiên bản Python hiện tại

    Chúng ta có thể tìm thấy điều này nếu chúng ta xem lại mã nguồn cho mô-đun-hàng đợi và các lớp. put() không sử dụng khóa mutex bên trong

    Như vậy, một số hoạt động được thực hiện trực tiếp, dựa trên bản chất nguyên tử của lớp Danh sách. qsize() và kiểm tra xem hàng đợi đã đầy qua full() hay rỗng qua empty()

    Ví dụ. set a item with put() not use the mutex key in. xâu chuỗi. Điều kiện các đối tượng, cho phép các luồng chờ nhận các mục từ hàng đợi cho đến khi có các mục mới hoặc chờ đưa các mục vào hàng đợi cho đến khi nó không đầy. Những điều kiện này cũng chia sẻ cùng một mutex

    Các hoạt động khác liên quan đến tổng hợp các hoạt động trong danh sách được bảo vệ bởi từ khóa mutex bên trong như kiểm tra kích thước của hàng đợi thông qua hàm qsize () và kiểm tra xem hàng đợi có đầy đủ thông tin qua đầy đủ hay không . được()

    Ngoài ra, queue cung cấp một số khả năng queue/thông báo thông báo qua các luồng nội bộ. Đối tượng điều kiện, cho phép các chủ đề chờ đợi các mục từ hàng đợi cho đến khi có các mục mới hoặc chờ đặt các mục hàng đợi cho đến khi nó không đầy đủ. Những điều kiện này cũng chia sẻ cùng một mutex

    Các hoạt động đầu tiên có một điều kiện sử dụng cùng một khóa mutex bên trong cũng được bảo vệ. Một ví dụ là nhận các mục từ hàng đợi thông qua get ()

    Tôi khuyến khích bạn nên sử dụng một lớp hàng thay vì phát triển lớp danh sách toàn bộ luồng, nếu nó cung cấp tất cả hoặc hầu hết các chức năng bạn yêu cầu trong ứng dụng của mình. xếp hàng. Hàng đợi thay vì lớp ThreadSafeList của chúng tôi

    Ví dụ về việc sử dụng hàng đợi một hàm toàn chủ đềadd_items() gọi hàm put() để thêm các mục vào hàng đợi

    Chúng tôi có thể cập nhật ví dụ danh sách toàn chủ đề của mình để sử dụng hàng đợi. queue thay vì lớp ThreadSafelist của chúng tôi

    Đầu tiên, chúng tôi phải cập nhật hàm add_items () của chúng tôi để gọi put () để thêm các mục trên hàng đợi

    Phiên bản cập nhật chức năng của chức năng được liệt kê dưới đây. add_items(safe_list).

        foriinrange(100000). choitrongphạm vi( . 100000):

            safe_list. put(i)safe_list. đặt(i)

    # Thêm các mục vào danh sách hàng đợi. Xếp hàng

    . .

    def add_items (toàn_danh sách)

    safe_list=Queue()=Hàng đợi()

    Sau đó, chúng ta có thể xác định toàn bộ các biến của chúng ta là một ví dụ của hàng đợi. xếp hàng. hàm qsize() trên hàng đợi

    . .

    # Tạo danh sách toàn chủ đề (Đang chờ)

    Cuối cùng, khi kiểm tra kích thước của cấu trúc ở cuối chương trình, chúng ta có thể gọi hàm qsize () trên hàng đợi. (f‘Kích thước danh sách. {safe_list. qsize()}’)

    # Báo cáo số lượng mục trong danh sách

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    in (size f’list. {an_list. qsize ()} ‘)

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

    # SuperfastPython. comluồng nhập Luồng

    # Ví dụ về danh sách toàn chủ đề thông qua hàng đợihàng đợi nhập Hàng đợi<

    Đầu tiên, chúng tôi phải cập nhật hàm add_items () của chúng tôi để gọi put () để thêm các mục trên hàng đợi

    Phiên bản cập nhật chức năng của chức năng được liệt kê dưới đây. add_items(safe_list).

        foriinrange(100000). cho itrongphạm vi( . 100000):

            safe_list. put(i)safe_list. đặt(i)

    def add_items (toàn_danh sách)

    safe_list=Queue()=Hàng đợi()

    Sau đó, chúng ta có thể xác định toàn bộ các biến của chúng ta là một ví dụ của hàng đợi. xếp hàng

    threads=[Thread(target=add_items,args=(safe_list,))foriinrange(10)]=[Thread(target=add_items,args=(safe_list,))foriin range(10)]

    # Tạo danh sách toàn chủ đề (Đang chờ)

    Cuối cùng, khi kiểm tra kích thước của cấu trúc ở cuối chương trình, chúng ta có thể gọi hàm qsize () trên hàng đợi. chuỗi trongchuỗi.

        chủ đề. start()chuỗi. bắt đầu()

    # Báo cáo số lượng mục trong danh sách

    in (kích thước f’list. {an_list. qsize ()} ‘)(‘Main chờ chủ đề. ‘)

    Cuối cùng, khi kiểm tra kích thước của cấu trúc ở cuối chương trình, chúng ta có thể gọi hàm qsize () trên hàng đợi. chuỗi trongchuỗi.

        chủ đề. tham gia()chuỗi. tham gia()

    # Tạo danh sách toàn chủ đề (Đang chờ)

    Cuối cùng, khi kiểm tra kích thước của cấu trúc ở cuối chương trình, chúng ta có thể gọi hàm qsize () trên hàng đợi. (f‘Kích thước danh sách. {safe_list. qsize()}’)

    # Báo cáo số lượng mục trong danh sách

    in (size f’list. {an_list. qsize ()} ‘)

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

    #Trăn Siêu Nhanh. com

    # Ví dụ về danh sách toàn chủ đề thông qua hàng đợi

    from input stream streamqueue. Hàng đợi không chặn khi thêm các mục – đó là phần lớn công việc được thực hiện bởi các luồng trong ví dụ này

    từ queue hàng queue Main waiting forthreads . .. .

    # Định cấu hình các luồng để thêm vào danh sáchkích thước. 1000000

    # Bắt đầu chủ đề

    chủ đề hướng tới chủ đề

    # Chờ tất cả các luồng kết thúc

    • in (‘Chờ các chủ đề chính. ‘)

    Khởi động ví dụ đầu tiên để tạo ra một hàng chờ đợi

    • Sau đó chủ đề được cấu hình và bắt đầu. Mỗi chủ đề thêm 100. 000 queue into the clock time fast could

    Chặn luồng chính cho đến khi các luồng công nhân chấm dứt

    • Cuối cùng, chặn chặn luồng chính và báo cáo kích thước của hàng đợi. cuốn sách của tôi. ).  
    • Trong trường hợp này, kích thước được báo cáo là 1. 000. 000 mặt hàng, như mong đợi
    • Hơn nữa, bạn sẽ thấy rằng ví dụ này nhanh hơn đáng kể để thực thi vì hàng đợi. hàng đợi không bị chặn khi thêm các mục – phần lớn công việc được thực hiện bởi các luồng trong ví dụ này

    ‘Main Chờ đợi trước

    • Kích thước danh sách. 1000000
      • Đọ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
    • Chủ đề – song song based on stream
      • Hướng dẫn

    mang đi

    Bây giờ bạn đã biết cách sử dụng một danh sách toàn chủ đề trong Python

    Bạn có câu hỏi nào không? .
    Đặt câu hỏi của bạn trong phần bình luận bên dưới và tôi sẽ cố gắng hết sức để trả lời.

    Ảnh của Harley-Davidson trên unsplash

    Is list in the title python

    Hầu hết các danh sách hoạt động là nguyên tử. Nhiều biến hoạt động phổ biến trong danh sách là nguyên tử, có nghĩa là chúng an toàn cho luồng. Nhiều thao tác phổ biến trong danh sách là nguyên tử, nghĩa là chúng an toàn cho luồng .

    Là chủ đề danh sách

    Tạo danh sách trống. Nó thực hiện giao diện danh sách. Nó là một biến có thể là chủ đề toàn bộ của ArrayList. Đại diện cho chung. Đây là biến thể an toàn cho luồng của ArrayList . T đại diện chung.

    Là chủ đề pop list python

    Các hoạt động pop () là nguyên tử, có nghĩa là chúng sẽ không bị gián đoạn bởi một luồng khác. Vì vậy, nếu bạn giới hạn bản thân chỉ sử dụng. append() and. pop(), thì bạn sẽ được toàn chủ đề. nếu bạn hạn chế chỉ sử dụng. chắp thêm() và. pop() , thì chuỗi của bạn sẽ an toàn .

    Python có thực sự đa luồng không?

    Python không hỗ trợ đa luồng vì Python trên trình thông dịch Cpython không hỗ trợ thực thi đa lõi thực sự thông qua đa luồng. Tuy nhiên, Python có một thư viện stream. Gil không chặn dòng

    Bạn đang tìm hiểu bài viết An toàn luồng trong python 2024


    HỆ THỐNG CỬA HÀNG TRÙM SỈ QUẢNG CHÂU

    Điện thoại: 092.484.9483

    Zalo: 092.484.9483

    Facebookhttps://facebook.com/giatlathuhuongcom/

    WebsiteTrumsiquangchau.com

    Địa chỉ: Ngõ 346 Nam Dư, Trần Phú, Hoàng Mai, Hà Nội.