python多進(jìn)程負(fù)載均衡
下面是一個(gè)簡單的 Python 多進(jìn)程負(fù)載均衡的例子,使用了 multiprocessing
和 queue
模塊:
import multiprocessing
import random
import time
# 需要執(zhí)行的任務(wù)函數(shù)
def task(queue, worker_id):
? ?while True:
? ? ? ?item = queue.get()
? ? ? ?if item is None:
? ? ? ? ? ?print(f"Worker {worker_id} exiting")
? ? ? ? ? ?break
? ? ? ?print(f"Worker {worker_id} processing item {item}")
? ? ? ?time.sleep(random.uniform(0.5, 1.5))
if __name__ == '__main__':
? ?# 任務(wù)隊(duì)列
? ?task_queue = multiprocessing.Queue()
? ?# 添加一些任務(wù)到隊(duì)列
? ?for i in range(20):
? ? ? ?task_queue.put(i)
? ?# 創(chuàng)建多個(gè)進(jìn)程執(zhí)行任務(wù)
? ?num_workers = multiprocessing.cpu_count()
? ?workers = []
? ?for i in range(num_workers):
? ? ? ?worker = multiprocessing.Process(target=task, args=(task_queue, i))
? ? ? ?worker.start()
? ? ? ?workers.append(worker)
? ?# 等待所有進(jìn)程執(zhí)行完畢
? ?for worker in workers:
? ? ? ?worker.join()
? ?print("All tasks completed")
這個(gè)例子中,我們首先定義了一個(gè)任務(wù)函數(shù) task
,它從任務(wù)隊(duì)列中獲取任務(wù)并執(zhí)行。然后,在 if __name__ == '__main__'
的條件下,我們創(chuàng)建了一個(gè) multiprocessing.Queue
對(duì)象,將一些任務(wù)添加到隊(duì)列中,并創(chuàng)建了多個(gè)進(jìn)程,每個(gè)進(jìn)程都執(zhí)行 task
函數(shù)。最后,我們等待所有進(jìn)程執(zhí)行完畢,并輸出一個(gè)完成的消息。
在這個(gè)例子中,所有的進(jìn)程都從同一個(gè)任務(wù)隊(duì)列中獲取任務(wù),這就實(shí)現(xiàn)了簡單的負(fù)載均衡。當(dāng)一個(gè)進(jìn)程完成一個(gè)任務(wù)后,它會(huì)自動(dòng)從隊(duì)列中獲取下一個(gè)任務(wù),直到所有任務(wù)都完成為止。
標(biāo)簽: