Administrator
发布于 2024-04-11 / 22 阅读
0

Python编程 多进程算法 - 曲速引擎(Warp Drive )

一、多进程使用背景

想象一下,你正在组织一场大型派对,准备了一堆美味的食物需要尽快送到各个桌子上。如果只有你一个人负责这项任务,那么不管你多么能干,也难免手忙脚乱,派对的气氛可能就会因为等待而变得有些尴尬。但是,如果你能召集几位朋友来帮忙,每个人负责一部分任务,那么所有的食物就能迅速且高效地送到每个角落,派对的气氛自然也会活跃许多。

这个场景其实很像我们在编程中使用多进程的情况。想象你的电脑是那个派对现场,而你需要完成的任务(比如数据处理、文件读写等)就像是那些需要分发的食物。如果只用单一进程(就是你自己一个人干活),可能会因为任务过于繁重而导致处理速度慢,效率低下。但如果我们采用多进程(就像召集了一群朋友来帮忙),将大任务分解成许多小任务,由不同的进程并行处理,那么整体的完成速度就会大大提升。

多进程就像是给电脑提供了更多的手脚,让它能同时做更多的事情。尤其是在处理那些计算密集型或者需要大量读写操作的任务时,多进程能让电脑的多个CPU核心同时发挥作用,大幅提高任务的处理效率。就好比在派对上,有了更多帮手,美味的食物能更快地送到每个人手中,让派对的气氛更加热烈。

二、多进程算法

import concurrent.futures
import multiprocessing
import time

# 函数
def count(number, lock):
    i = 1
    for i in range(0, 1000000):
        i = i + 1

    # 判断锁,避免同时写入数据
    with lock:
        # 直接在这里处理文件操作
        with open("datalnfo.txt", "a+") as file:
            file.write(f"{number * i}\n")

    return number * i

# 仅使用进程池
def run_pool():
    lock = multiprocessing.Manager().Lock()

    with concurrent.futures.ProcessPoolExecutor(max_workers=4) as executor:
        futures = [executor.submit(count, i, lock) for i in range(100)]
        for future in concurrent.futures.as_completed(futures):
            pass
            #print("[RESULT] : {}".format(future.result()))

if __name__ == '__main__':
    start = time.time()
    run_pool()  # 进程池
    print("[INFO]多进程耗时:{}".format(time.time() - start))

本文由 曲速引擎(Warp Drive)个人博客 曲速引擎(Warp Drive)CSDN技术博客 创作,转载请说明出处谢谢