Python多处理方式

2024-05-17 16:44:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个比单进程慢的多进程函数

for n in range(nombre_de_cycles):
    debut = time.time()
    paris.reveil_multiproc(2)
    duree = time.time() - debut
    print((n, duree), end=",")

提供:

(0, 13.04754900932312),(1, 11.9977388381958),(2, 12.56324291229248),(3, 12.289109945297241),(4, 12.300051927566528),(5, 12.322132110595703),(6, 12.058021783828735),(7, 13.218597173690796),(8, 11.991199016571045),(9, 12.178853034973145),

当monoproc:

   for n in range(nombre_de_cycles):
        debut = time.time()
        paris.reveil()
        duree = time.time() - debut
        print((n, duree), end=",")

给予

(0, 0.19302606582641602),(1, 0.030661821365356445),(2, 0.28160881996154785),(3, 0.04853320121765137),(4, 0.20609474182128906),(5, 0.04185295104980469),(6, 0.20528626441955566),(7, 0.040557146072387695),(8, 0.19860100746154785),(9, 0.11386394500732422),

功能如下:

Class Ville:
    timestamp = 0
    def __init__(self, nb_de_cyclistes, Prestataire):
        self.timestamp =0

    def reveil(self):
        self.timestamp += 1
        list(map(lambda cycliste :cycliste.avancer(self.timestamp), self.cyclistes))

    def faire_avancer(cycliste):
        cycliste.avancer(Ville.timestamp)

    def reveil_multiproc(self, n_jobs=1):
        import multiprocessing
        self.timestamp += 1
        Ville.timestamp = self.timestamp
        pool            = multiprocessing.Pool(n_jobs)
        pool.map(Ville.faire_avancer, self.cyclistes)

我做错了什么?你知道吗


Tags: inselffortime进程defdetimestamp
1条回答
网友
1楼 · 发布于 2024-05-17 16:44:02

多处理不是一个一刀切的解决方案。您的解决方案只需做很少的工作,就会产生大量的开销。你知道吗

您的开销包括:创建2个工作进程,将self.cylistes拆分成块,用pickle序列化,并使用IPC将其发送到子进程。所有这些都只是简单地调用cycliste.avancer(),它似乎只做很少的工作。你知道吗

当我们看不到您在avancer()中做了多少工作时,拥有一个数十万个项目的大列表是微不足道的,毫无意义。这里的项目越多,实际上很可能会减慢多处理方法的速度,因为不太可能对pickle性能进行优化。你知道吗

在进行过早的优化之前,您需要学习如何使用Python的分析工具(例如:cProfile、line\u profiler)。你知道吗

当您有长时间运行的CPU密集型任务,而这些任务的大部分时间都不在等待IO时,请使用multiprocessing。如果每次对avancer()的调用都需要30秒才能运行,那么使用multiprocessing时的性能会比不使用multiprocessing时好得多。你知道吗

相关问题 更多 >