【发布时间】:2016-03-07 09:49:20
【问题描述】:
祝你有美好的一天!
我有两个功能。首先没有并行:
def non_parallel():
for a in range(500):
for b in range(500):
for c in range(500):
try:
if (1+1/a)*(1+1/b)*(1+1/c)==3:
print("a=",a,", b=",b,", c=", c, sep='')
except ZeroDivisionError:
pass
print ("Run time: ", datetime.now() - startTime)
其次是并行:
def parallel(a):
for b in range(500):
for c in range(500):
try:
if (1+1/a)*(1+1/b)*(1+1/c)==3:
print("a=",a,", b=",b,", c=", c, sep='')
except ZeroDivisionError:
pass
调用并行函数(我有 2 个核心):
Parallel(n_jobs=num_cores)(delayed(parallel)(a) for a in range(500))
但没有并行运行我的脚本 0:02:03.972283 并联功能:02:45.182950
我认为,并行函数运行时间更长,因为更多时间花在函数调用上。是真的?是否可以并行化其他方式?
完整代码:
#!/usr/bin/python3
from datetime import datetime
from joblib import Parallel, delayed
import multiprocessing
num_cores = multiprocessing.cpu_count()
print (num_cores)
startTime = datetime.now()
def non_parallel():
for a in range(500):
for b in range(500):
for c in range(500):
try:
if (1+1/a)*(1+1/b)*(1+1/c)==3:
print("a=",a,", b=",b,", c=", c, sep='')
except ZeroDivisionError:
pass
print ("Time: ", datetime.now() - startTime)
startTime = datetime.now()
def parallel(a):
for b in range(500):
for c in range(500):
try:
if (1+1/a)*(1+1/b)*(1+1/c)==3:
print("a=",a,", b=",b,", c=", c, sep='')
except ZeroDivisionError:
pass
non_parallel()
Parallel(n_jobs=num_cores)(delayed(parallel)(a) for a in range(500))
print ("Time: ", datetime.now() - startTime)
print ("End")
【问题讨论】:
标签: python python-3.x parallel-processing python-multiprocessing