为什么 PyPy3 在启动新进程时速度较慢?

时间:2021-06-01 07:09:32

标签: python performance process multiprocessing pypy

我想知道为什么当我在 PyPy3 中启动新进程 (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 秒来执行相同的代码。 (其他测试还表明 PyPy3 在我的系统中启动进程时比 CPython 慢 2 倍......)

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

0 个答案:

没有答案