Je crée un pool de processus avec un pool de multitraitement. J'ai beaucoup de tâches à traiter, mais il n'est pas facile d'obtenir les qps de la tâche. Donc, je veux obtenir le numéro de processus actif du pool afin que je puisse définir une taille de pool appropriée. Voici le code tout:Python obtenir le numéro de processus actif du pool de multitraitement
import time
from multiprocessing import Pool
def do_work(msg):
# do some work
if __name__ == '__main__':
consumer = KafkaConsumer(
group_id=worker_config.kafka_group_id,
bootstrap_servers=kafka_url,
auto_offset_reset=worker_config.kafka_reset,
enable_auto_commit=True)
consumer.subscribe(topics=worker_config.kafka_topics)
for message in consumer:
logging.info('topic=%s, partition=%d, msg=%s' % (message.topic, message.partition, msg))
pool.apply_async(do_work, (message,))
process_count = number_of_active_process_of_pool
logging.info("number_of_active_process_number is %d", process_count)
pool.close()
pool.join()
merci pour la réponse. L'intégralité du code est répertoriée ci-dessous. Je reçois des messages de Kafka. La taille du pool est 8. Lorsque le nombre de messages est supérieur à 8, le nombre de processus est toujours 8 et le message est stocké dans le pool de processus. Mais quand le nombre de message est inférieur à 8, par exemple 6, le nombre de processus actifs dans le pool est 6. Je veux juste connaître le nombre de processus actifs dans le pool qui est 6. Parce que quand j'obtiens un message de kafka , je vais le jeter dans la piscine, donc je ne me soucie pas du résultat du processus. – buaawht
Parce que je ne connais pas le nombre de tous les messages, utilisez '.ready()' pour 'obtenir la quantité de tâches effectuées et par extension la quantité de tâches restant à faire' ne convient pas pour mon cas. – buaawht
Chaque fois que vous ajoutez une tâche via apply_async, vous placez l'objet de tâche renvoyé dans une liste. Chaque fois que vous avez besoin d'une quantité de tâches à gauche, vous parcourez la liste et sortez tous les résultats qui sont prêts(). Vous pouvez alors len (liste) et obtenir les tâches restantes qui doivent encore être faites. – Berserker