簡體   English   中英

Python獲取多處理池的活動進程號

[英]Python get the active process number of multiprocessing pool

我用多處理池創建一個處理池。 我有很多任務要處理,但是要獲得任務的qps並不容易。 因此,我想獲取該池的活動進程號,以便可以設置適當的池大小。 這是整個代碼:

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()

apply_async為您提供AsyncResult: https ://docs.python.org/3/library/multiprocessing.html#multiprocessing.pool.AsyncResult

您可以使用.ready()來確定是否完成。 通過這種方式,您可以獲得完成的任務數量,並且可以擴展到尚待完成的任務數量。 只要該數目超過poolsize,就可以假定許多進程正在運行poolsize,如果沒有運行,則剩余的任務數量就是正在運行的進程數量。

備擇方案:

如果您不使用apply_async而是使用一個隊列(例如隊列),則可以使用.qsize()獲得近似的隊列大小

還有multiprocessing.active_children ,但是僅在這些進程結束時才起作用,但是池不起作用; 除非您將其命令為.join()否則您的情況將有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM