1 votes

Combien de threads puis-je exécuter dans mon programme?

J'ai un programme Python qui utilise le module threading et exécute des threads multiples qui exécutent une fonction. Le nombre 8 ci-dessous est le nombre de threads dans le programme mais j'ai besoin de savoir combien de threads mon appareil peut gérer pour exécuter le programme le plus rapidement possible.

Voici la partie concernée de mon programme Python :

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

q = queue.Queue()

Les données CPU de mon appareil sont (en utilisant la commande lscpu sous Ubuntu 18.04) :

Architecture:        x86_64
CPU op-mode(s):      32 bits, 64 bits
Byte Order:          Little Endian
CPU(s):              8
On-line CPU(s) list: 0-7
Thread(s) par cœur:  2
Cœur(s) par socket:  4
Socket(s):           1
Node(s) NUMA:        1
ID de fabricant:     GenuineIntel
Famille CPU:         6
Modèle:              94
Nom du modèle:       Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz
Révision:            3
Fréquence du CPU:    1899,473
Fréquence max. CPU:  3500.0000
Fréquence min. CPU:  800.0000
BogoMIPS:            5184,00
Virtualisation:      VT-x
Cache L1d :          32K
Cache L1i :          32K
Cache L2 :           256K
Cache L3 :           6144K
CPU(s) node0 NUMA:   0-7

Pouvez-vous me dire combien de threads mon programme peut gérer sans causer de problèmes? Et comment cela est-il calculé s'il vous plaît?

0 votes

"comment cela est-il calculé s'il vous plaît?" - Veuillez clarifier cette question en éditant votre question. Veuillez ne pas répondre avec un commentaire.

1 votes

Vous devez nous parler de chaque aspect de votre programme. Par exemple, si chaque thread utilise 3 Go de RAM et que vous avez 8 Go, votre limite pratique est de 2. Si chaque thread nécessite 10 minutes de téléchargement à 90 % de capacité, votre limite est de 1 car vous n'avez pas assez de vitesse Internet. Vous pourriez également avoir un goulot d'étranglement au niveau du disque dur. Le CPU n'est qu'un aspect parmi tant d'autres à prendre en compte.

0 votes

Vous pouvez trouver de meilleures réponses sur stackoverflow.com, un site similaire à SuperUser, conçu pour les programmeurs. Ce genre de question a certainement déjà été posée, alors faites quelques recherches et vous trouverez probablement ce dont vous avez besoin. SuperUser est plus adapté aux questions liées à l'informatique qu'à la programmation.

3voto

Johan Leino Points 2533

Pouvez-vous me dire quel est le nombre de threads que mon programme peut gérer sans causer de problèmes ?

Le i7-6700HQ est un processeur 4 cœurs. Chaque cœur prend en charge la technologie Intel® Hyper-Threading. Cela signifie que votre processeur peut prendre en charge 8 threads.

Le chiffre 8 ci-dessous représente le nombre de threads dans le programme, mais j'ai besoin de savoir quel est le nombre de threads que mon appareil peut gérer pour exécuter le programme aussi rapidement que possible.

Votre code est déjà optimisé pour le matériel que vous avez.

entrer la description de l’image ici

entrer la description de l’image ici

0 votes

Merci. Et si je lance plusieurs instances du programme, chacune avec 8 threads ? Est-ce possible ou le nombre total est de 8 threads peu importe le nombre d'instances (par plusieurs instances, je veux dire lancer le programme à partir d'une fenêtre terminal : python myprog.py, puis en lancer un autre à partir d'un autre terminal, etc.) Puis-je faire en sorte que chaque lancement utilise 8 threads ? Et quel est le nombre maximum d'instances que je peux lancer ?

0 votes

Il n'est pas possible, avec les informations que vous avez fournies, de prédire combien d'instances de votre programme python vous pouvez exécuter. Une estimation globale impliquerait une combinaison de la charge de travail de chaque instance pour votre processeur et la quantité de mémoire requise par chaque instance. Votre code Python ne pourra exécuter que 8 threads simultanément, avoir plusieurs instances du même code ne vous aidera pas à traiter les données plus rapidement. Comment rendre votre code Python plus rapide dépasse le cadre de cette question. Toute question supplémentaire sur la façon d'optimiser votre script Python sera ignorée.

0 votes

De multiples instances du même code ne vous aideraient pas à traiter les données plus rapidement, c'est certain. Mais mon programme fait du web scraping pour les URL. Par conséquent, plusieurs instances me permettront de récupérer plus d'URL simultanément. N'est-ce pas ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X