Il y a une question : s'il s'agit des données de la base de données, pourquoi ne pas exécuter SQL ? N'est-ce pas beaucoup plus efficace que le multi-processus ? Si vous devez choisir l'une des deux options que vous avez proposées, alors considérez ceci :
Stockez d'abord les données d'origine dans la file d'attente (file d'attente), en tant que producteur puis récupérez les données de la file d'attente, effectuez des opérations, en tant que consommateur À ce stade, vous pouvez ouvrir plusieurs threads sur le consommateur (bien sûr vous Si le verrou est bien géré, le producteur peut aussi faire du multi-threading)
while tmp_queue.empty() is not True:
x = tmp_queue.get()
x += 1
Dans la file d'attente, s'il y a toujours un élément, le thread continuera à fonctionner.
Vous pouvez écrire directement les deux fonctions de lecture de données et de données +1 en une seule opération, puis utiliser plusieurs processus pour fonctionner, tout comme le pool de processus mentionné ci-dessus. Définissez la taille du pool de processus en fonction du nombre de cœurs de votre processeur. Puisqu'il n'y a pas de partage de mémoire ni de communication directe entre plusieurs processus, vous pouvez d'abord utiliser plusieurs processus pour lire toutes les données de la base de données, puis utiliser plusieurs processus pour effectuer val+1
Il y a une question : s'il s'agit des données de la base de données, pourquoi ne pas exécuter SQL ? N'est-ce pas beaucoup plus efficace que le multi-processus ?
Si vous devez choisir l'une des deux options que vous avez proposées, alors considérez ceci :
Stockez d'abord les données d'origine dans la file d'attente (file d'attente), en tant que producteur
puis récupérez les données de la file d'attente, effectuez des opérations, en tant que consommateur
À ce stade, vous pouvez ouvrir plusieurs threads sur le consommateur (bien sûr vous Si le verrou est bien géré, le producteur peut aussi faire du multi-threading)
Dans la file d'attente, s'il y a toujours un élément, le thread continuera à fonctionner.
En fait, la meilleure façon d'implémenter le multi-traitement en Python est d'utiliser
multiprocessing
map
dansExemple (Python 3) :
Vous pouvez écrire directement les deux fonctions de lecture de données et de données +1 en une seule opération, puis utiliser plusieurs processus pour fonctionner, tout comme le pool de processus mentionné ci-dessus. Définissez la taille du pool de processus en fonction du nombre de cœurs de votre processeur. Puisqu'il n'y a pas de partage de mémoire ni de communication directe entre plusieurs processus, vous pouvez d'abord utiliser plusieurs processus pour lire toutes les données de la base de données, puis utiliser plusieurs processus pour effectuer val+1