繁体   English   中英

使用Python进程进行多处理

[英]Multiprocessing with Python 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个真正的Core仅25%CPU => 1Core 100%已使用)

我知道池类,但是我不想使用它。

谢谢您的帮助。

更新资料

您好,每个人,带有“ typo”字样的人都是不利的。 对于那个很抱歉。 Bakuriu,谢谢您的回答。 实际上,您是对的。 我认为这是拼写错误,而且工作太多。 :-(因此,我再次更改了示例。对于所有感兴趣的人:

我创建了两个函数,在主体的第一部分中,我按顺序运行了3次函数。 我的电脑大约需要 36秒 然后,我开始两个新过程。 这些在此处并行计算其结果。 作为一个小的补充,程序本身的皮肤进程也会计算功能test1,这应表明主程序本身也可以执行某些操作。 我的计算时间为12秒。 因此,它对于Internet上的所有人都是可理解的,这意味着我曾经在此处附加图片。 任务管理器

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)

您的代码按顺序执行,因为没有将test1传递给Processtarget参数,而是将test1结果传递给了它!

您想这样做:

worker_1 = multiprocessing.Process(target=test1, args=(100,))

正如您在另一个调用中所做的那样,这不是

worker_1 = multiprocessing.Process(target=test1(100))

此代码首先执行test1(100) ,然后返回None并将其分配给target “空进程”。 之后,您生成第二个执行test2(100)进程。 因此,您将依次执行代码,并增加产生两个进程的开销。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM