[英]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
传递给Process
的target
参数,而是将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.