Hướng dẫn how many threads can i run in python? - tôi có thể chạy bao nhiêu chủ đề trong python?

Một số người sẽ nói rằng hai chủ đề là quá nhiều - tôi không hoàn toàn ở trong trại đó :-)

Đây là lời khuyên của tôi: Đo lường, đừng đoán. Một gợi ý là làm cho nó có thể định cấu hình và ban đầu đặt nó thành 100, sau đó phát hành phần mềm của bạn ra tự nhiên và theo dõi những gì xảy ra.

Nếu việc sử dụng chủ đề của bạn đạt đỉnh ở mức 3, thì 100 là quá nhiều. Nếu nó vẫn ở mức 100 trong hầu hết thời gian trong ngày, hãy tăng tới 200 và xem điều gì sẽ xảy ra.

Bạn thực sự có thể có mã của mình theo dõi việc sử dụng và điều chỉnh cấu hình cho lần tiếp theo nó bắt đầu nhưng điều đó có lẽ là quá mức cần thiết.


Để làm rõ và xây dựng:

Tôi không ủng hộ việc lăn hệ thống con gộp chủ đề của riêng bạn, bằng mọi cách sử dụng hệ thống bạn có. Nhưng, vì bạn đang hỏi về một điểm giới hạn tốt cho các chủ đề, tôi cho rằng việc triển khai nhóm chủ đề của bạn có khả năng giới hạn số lượng chủ đề tối đa được tạo (đó là một điều tốt).

Tôi đã viết mã gộp kết nối chủ đề và cơ sở dữ liệu và chúng có các tính năng sau (mà tôi tin là rất cần thiết cho hiệu suất):

  • Một số lượng tối thiểu của các luồng hoạt động.
  • Một số lượng tối đa của các luồng.
  • Tắt các chủ đề chưa được sử dụng trong một thời gian.

Đầu tiên đặt đường cơ sở cho hiệu suất tối thiểu theo máy khách nhóm luồng (số lượng chủ đề này luôn có sẵn để sử dụng). Thứ hai đặt ra một hạn chế về việc sử dụng tài nguyên bằng các luồng hoạt động. Thứ ba đưa bạn trở lại đường cơ sở trong thời gian yên tĩnh để giảm thiểu việc sử dụng tài nguyên.

Bạn cần cân bằng việc sử dụng tài nguyên có các luồng không sử dụng (a) so với việc sử dụng tài nguyên không có đủ luồng để thực hiện công việc (b).

. (B) Nói chung sẽ là một sự chậm trễ trong việc xử lý các yêu cầu khi chúng đến khi bạn cần chờ một chủ đề có sẵn.

Đó là lý do tại sao bạn đo lường. Khi bạn tuyên bố, phần lớn các chủ đề của bạn sẽ chờ phản hồi từ cơ sở dữ liệu để chúng không chạy. Có hai yếu tố ảnh hưởng đến số lượng chủ đề bạn nên cho phép.

Đầu tiên là số lượng kết nối DB có sẵn. Đây có thể là một giới hạn cứng trừ khi bạn có thể tăng nó tại DBMS - Tôi sẽ cho rằng DBM của bạn có thể có số lượng kết nối không giới hạn trong trường hợp này (mặc dù bạn cũng nên đo lường điều đó).

Sau đó, số lượng chủ đề bạn nên phụ thuộc vào việc sử dụng lịch sử của bạn. Tối thiểu bạn nên chạy là số tối thiểu mà bạn đã từng chạy + một%, với mức tối thiểu tuyệt đối (ví dụ, và làm cho nó có thể định cấu hình giống như A) 5.

Số lượng chủ đề tối đa phải là tối đa lịch sử + B%của bạn.

Bạn cũng nên theo dõi các thay đổi hành vi. Nếu, vì một số lý do, việc sử dụng của bạn lên tới 100% có sẵn trong một thời gian đáng kể (do đó nó sẽ ảnh hưởng đến hiệu suất của khách hàng), bạn nên tăng mức tối đa được phép cho đến khi nó một lần nữa B% cao hơn.


Đáp lại "chính xác thì tôi nên đo lường điều gì?" câu hỏi:

Những gì bạn nên đo cụ thể là lượng chủ đề tối đa trong sử dụng đồng thời (ví dụ: chờ đợi khi trả lại từ cuộc gọi DB) theo tải. Sau đó, thêm hệ số an toàn 10% chẳng hạn (nhấn mạnh, vì các áp phích khác dường như lấy các ví dụ của tôi làm khuyến nghị cố định).

Ngoài ra, điều này nên được thực hiện trong môi trường sản xuất để điều chỉnh. Không sao để có được một ước tính trước nhưng bạn không bao giờ biết sản phẩm nào sẽ ném theo cách của bạn (đó là lý do tại sao tất cả những thứ này nên được cấu hình trong thời gian chạy). Điều này là để bắt gặp một tình huống như tăng gấp đôi bất ngờ các cuộc gọi của khách hàng đến.

Tôi có một chương trình Python sử dụng mô -đun luồng và chạy đa luồng thực thi chức năng. Số 8 dưới đây là số lượng luồng trong chương trình nhưng tôi cần biết số lượng luồng mà thiết bị của tôi có thể xử lý để chạy chương trình càng nhanh càng tốt.

Đây là phần liên quan trong chương trình Python của tôi:

for i in range(8):
      t = ThreadUrl(q)
      t.setDaemon(True)
      t.start()

Trong đó q = queue.Queue()

Dữ liệu CPU thiết bị của tôi là (sử dụng lệnh lscpu trong Ubuntu 18.04):

Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              8
On-line CPU(s) list: 0-7
Thread(s) per core:  2
Core(s) per socket:  4
Socket(s):           1
NUMA node(s):        1
Vendor ID:           GenuineIntel
CPU family:          6
Model:               94
Model name:          Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz
Stepping:            3
CPU MHz:             1899.473
CPU max MHz:         3500.0000
CPU min MHz:         800.0000
BogoMIPS:            5184.00
Virtualization:      VT-x
L1d cache:           32K
L1i cache:           32K
L2 cache:            256K
L3 cache:            6144K
NUMA node0 CPU(s):   0-7

Bạn có thể cho tôi biết số lượng chủ đề của tôi có thể xử lý mà không gây ra vấn đề gì không? Và làm thế nào được tính toán xin vui lòng?

Đã hỏi ngày 4 tháng 3 năm 2019 lúc 20:28Mar 4, 2019 at 20:28

Hướng dẫn how many threads can i run in python? - tôi có thể chạy bao nhiêu chủ đề trong python?

4

Bạn có thể cho tôi biết số lượng chủ đề của tôi có thể xử lý mà không gây ra vấn đề gì không?

I7-6700HQ là bộ xử lý 4 lõi. Mỗi cốt lõi hỗ trợ Intel® Hyper-Threading Technology. Điều này có nghĩa là bộ xử lý của bạn có thể hỗ trợ 8 luồng.

Số 8 dưới đây là số lượng luồng trong chương trình nhưng tôi cần biết số lượng luồng mà thiết bị của tôi có thể xử lý để chạy chương trình càng nhanh càng tốt.

Mã của bạn đã được tối ưu hóa cho phần cứng bạn có.

Hướng dẫn how many threads can i run in python? - tôi có thể chạy bao nhiêu chủ đề trong python?

Hướng dẫn how many threads can i run in python? - tôi có thể chạy bao nhiêu chủ đề trong python?

Đã trả lời ngày 4 tháng 3 năm 2019 lúc 20:37Mar 4, 2019 at 20:37

RamhoundramhoundRamhound

39,7K34 Huy hiệu vàng97 Huy hiệu bạc124 Huy hiệu đồng34 gold badges97 silver badges124 bronze badges

4

Python có thể chạy nhiều chủ đề không?

Để tóm tắt lại, luồng trong Python cho phép nhiều luồng được tạo trong một quy trình duy nhất, nhưng do Gil, không ai trong số chúng sẽ chạy cùng một lúc. Chủ đề vẫn là một lựa chọn rất tốt khi chạy nhiều tác vụ ràng buộc I/O đồng thời.threading in Python allows multiple threads to be created within a single process, but due to GIL, none of them will ever run at the exact same time. Threading is still a very good option when it comes to running multiple I/O bound tasks concurrently.

Giới hạn chủ đề trong Python là gì?

Chỉ một! OK, điều đó không chính xác là sự thật. Sự thật là, bạn có thể chạy nhiều luồng trong Python như bạn có bộ nhớ, nhưng tất cả các luồng trong một quy trình Python chạy trên một lõi máy duy nhất, vì vậy về mặt kỹ thuật chỉ có một luồng thực sự được thực hiện cùng một lúc.you can run as many threads in Python as you have memory for, but all threads in a Python process run on a single machine core, so technically only one thread is actually executing at once.

Có bao nhiêu chủ đề có thể chạy cùng một lúc?

Một lõi CPU duy nhất có thể có tối đa 2 luồng trên mỗi lõi.Ví dụ: nếu CPU là lõi kép (nghĩa là, 2 lõi), nó sẽ có 4 luồng.up-to 2 threads per core. For example, if a CPU is dual core (i.e., 2 cores) it will have 4 threads.

Các chủ đề Python có thể chạy trên nhiều lõi không?

Do những hạn chế được đưa ra bởi Gil trong Python, các chủ đề không thể đạt được sự song song thực sự sử dụng nhiều lõi CPU.Đa xử lý không có bất kỳ hạn chế như vậy.Lập kế hoạch quy trình được xử lý bởi HĐH, trong khi lập lịch chủ đề được thực hiện bởi trình thông dịch Python.