我想知道为什么当我在 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 倍......)
我想知道如何有效地解决问题。