Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么Py3在启动新流程时速度较慢?_Python_Performance_Process_Multiprocessing_Pypy - Fatal编程技术网

Python 为什么Py3在启动新流程时速度较慢?

Python 为什么Py3在启动新流程时速度较慢?,python,performance,process,multiprocessing,pypy,Python,Performance,Process,Multiprocessing,Pypy,我想知道为什么当我在Py3中启动新进程(multiprocessing.Process)时,它实际上比在CPython上做同样的事情慢2倍。我还想知道这方面的解决方案 这是我为说明这种效果而编写的一些代码: import multiprocessing as mp from time import sleep, time class A(object): def __init__(self, *args, **kwargs): # do other stuff

我想知道为什么当我在Py3中启动新进程(multiprocessing.Process)时,它实际上比在CPython上做同样的事情慢2倍。我还想知道这方面的解决方案

这是我为说明这种效果而编写的一些代码:

import multiprocessing as mp
from time import sleep, time

class A(object):
    def __init__(self, *args, **kwargs):
        # do other stuff
        #self.p_conn, self.child_conn = mp.Pipe()
        #self.q = mp.Queue()

    def do_something(self, i):
        sleep(0.1)
        s = '%s * %s = %s' % (i, i, i*i)
        #self.child_conn.send(s)
        #self.q.put(i**2)

    def run(self):
        processes = []

        for i in range(500):
            p = mp.Process(target=self.do_something, args=(i,))
            processes.append(p)

        [x.start() for x in processes]

        #for i in range(50):
        #    print(self.p_conn.recv())

        #for i in range(50):
        #    print(self.q.get())


if __name__ == '__main__':
    a = A()
    s = time()
    a.run()
    print(f"Took {time()-s} seconds...")

CPython花了大约18秒,而PyPy3花了大约37秒来执行相同的代码。(其他测试还表明,在我的系统中,Py3在启动进程时比CPython慢2倍…)


我想知道如何有效地解决这个问题。

您使用的是哪个操作系统?您正在创建一个全新的解释器流程。PyPy是JIT编译的。在JIT有时间“预热”之前,它通常比较慢。我相信它只是有更高的启动成本。这是我的怀疑如果你想让这样一个简单的代码更快,你需要远离使用进程。进程很繁重,创建它们是一项非常昂贵的任务,只有在计算时间相当长的情况下才行。PyPy的启动速度较慢,因为PyPy比CPython要初始化的东西多得多,更不用说预热时间了。考虑使用线程,同时可能释放吉尔(参见CPython、NUBA甚至PyPy实验事务性内存)。如果您不能或不想这样做,那么您需要更大的计算时间。请注意,Windows进程的创建速度比Linux/Mac慢。