![](/img/trans.png)
[英]Get number of workers from process Pool in python multiprocessing module
[英]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.