python是否容易使用ProcessPoolExecutor?

python是否容易使用ProcessPoolExecutor?,python,multiprocessing,Python,Multiprocessing,首先,我像这样使用ProcessPoolExecutor: def s(i): time.sleep(1) return i futs = [] with ProcessPoolExecutor(max_workers=10) as executor: for i in range(WORKER_CNT): print executor.submit(s, i,).result() 但我发现这不是平行的,然后我改成: def s(i): tim

首先,我像这样使用
ProcessPoolExecutor

def s(i):
    time.sleep(1)
    return i

futs = []
with ProcessPoolExecutor(max_workers=10) as executor:
    for i in range(WORKER_CNT):
        print executor.submit(s, i,).result()
但我发现这不是平行的,然后我改成:

def s(i):
    time.sleep(1)
    return i

futs = []
with ProcessPoolExecutor(max_workers=10) as executor:
    for i in range(WORKER_CNT):
        futs.append(executor.submit(s, i,))

for f in futs:
    print f.result()
def s(i):
    time.sleep(1)
    return i

futs = []
with ProcessPoolExecutor(max_workers=10) as executor:
    for i in range(WORKER_CNT):
        futs.append(executor.submit(s, i,))
        if len(futs) == 10:
            for f in futs:
                print f.result()
            futs = []
然后我开始担心
WORKER\u CNT
可能太大,我需要等待很长时间才能看到最后的结果,因此我改为:

def s(i):
    time.sleep(1)
    return i

futs = []
with ProcessPoolExecutor(max_workers=10) as executor:
    for i in range(WORKER_CNT):
        futs.append(executor.submit(s, i,))

for f in futs:
    print f.result()
def s(i):
    time.sleep(1)
    return i

futs = []
with ProcessPoolExecutor(max_workers=10) as executor:
    for i in range(WORKER_CNT):
        futs.append(executor.submit(s, i,))
        if len(futs) == 10:
            for f in futs:
                print f.result()
            futs = []
这次,我可以每次处理
10
我想知道我能更轻松地处理吗?

您想使用
Executor
类的方法:

def s(i):
    time.sleep(1)
    return i

with ProcessPoolExecutor(max_workers=10) as executor:
    results = executor.map(s, range(WORKER_CNT))
它还有一些其他选项来控制执行的方式

请注意,
结果
不是列表。它是一个迭代器,在计算值时接收值。因此,以下代码:

with ProcessPoolExecutor(max_workers=10) as executor:
    for result in executor.map(s, range(WORKER_CNT)):
        print(result)
一次只在内存中保存一个结果,因为它们只在几分之一秒内被消耗,并且需要更多的时间来生成