我正在尝试使用“Process”将Python脚本修改为多进程。问题是它不起作用。第一步,按顺序检索内容(test1、test2)。在第二个中,将并行调用它(test1 和 test2)。实际上没有速度差异。如果单独执行这些函数,您会注意到差异。在我看来,并行化应该只需要与最长的单个进程一样长的时间。我在这里缺少什么?
import multiprocessing
import time
def test1(k):
k = k * k
for e in range(1, k):
e = e**k
def test2(k):
k = k * k
for e in range(1, k):
e = e + 5 - 5*k ** 4000
if __name__ == '__main__':
start = time.time()
test1(100)
test2(100)
end = time.time()
print(end-start)
start = time.time()
worker_1 = multiprocessing.Process(target=test1(100))
worker_1.start()
worker_2 = multiprocessing.Process(target=test2, args=(100,))
worker_2.start()
worker_1.join()
worker_2.join()
end = time.time()
print(end-start)
我想补充一点,我检查了任务管理器,发现只使用了 1 个核心。 (4 个真正的核心仅 25% CPU => 1Core 100% 使用)
我知道 Pool Class,但我不想使用它。
感谢您的帮助。
Update
大家好,
有“错别字”的那一个是不利的。对于那个很抱歉。巴库留,谢谢你的回答。事实上,你是对的。我认为这是打字错误和太多的工作。 :-( 所以我再次改变了这个例子。对于所有感兴趣的人:
我创建了两个函数,在主函数的第一部分中,我按顺序运行了 3 次函数。我的电脑大约需要36秒。然后我启动两个新进程。它们在这里并行计算结果。作为一个小小的补充,程序本身的皮肤进程还计算了函数test1,这应该表明主程序本身也可以做一些事情。我得到的计算时间为 12 秒。为了让互联网上的所有人都能理解,这意味着什么,我曾经在这里附上一张图片。任务管理器
import multiprocessing
import time
def test1(k):
k = k * k
for e in range(1, k):
e = e**k
def test2(k):
k = k * k
for e in range(1, k):
e = e**k
if __name__ == '__main__':
start = time.time()
test1(100)
test2(100)
test1(100)
end = time.time()
print(end-start)
start = time.time()
worker_1 = multiprocessing.Process(target=test1, args=(100,))
worker_1.start()
worker_2 = multiprocessing.Process(target=test2, args=(100,))
worker_2.start()
test1(100)
worker_1.join()
worker_2.join()
end = time.time()
print(end-start)