了解Python多处理文档

时间:2018-06-25 12:46:45

标签: python multiprocessing documentation

试图了解Python多处理文档。 我会将其放在meta上,但不确定是否对以后的搜索者有价值。

关于这些示例与多处理的关系,我需要一些指导。

我是否正确地认为多处理正在使用多个进程(因此是CPU)来分解可迭代的任务并因此缩短其持续时间?

from multiprocessing import Process

def f(name):
    print('hello', name)

if __name__ == '__main__':
    p = Process(target=f, args=('bob',))
    p.start()
    p.join()

我们正在启动一个流程;但是如何开始多次完成任务?我要遍历Process + start()行吗?

然而,在文档的后面没有示例,例如:

for x in range(5):
    p[x]=Process(target=f, args=('bob',))
    p[x].start()
p.join()

这将是“现实生活”的实现吗?

这是“队列示例”:

from multiprocessing import Process, Queue

def f(q):
    q.put([42, None, 'hello'])

if __name__ == '__main__':
    q = Queue()
    p = Process(target=f, args=(q,))
    p.start()
    print(q.get())    # prints "[42, None, 'hello']"
    p.join()

但是,这种多重处理又如何呢?这仅仅是开始一个进程,然后让它在队列中运行对象? 如何使多个进程启动并运行队列中的对象?

最后是泳池:

from multiprocessing import Pool
import time

def f(x):
    return x*x

if __name__ == '__main__':
    with Pool(processes=4) as pool:         # start 4 worker processes
        result = pool.apply_async(f, (10,)) # evaluate "f(10)" asynchronously in a single process  
        print(result.get(timeout=1))        # prints "100" unless your computer is *very* slow

是否有四个进程同时执行10x10,并等待所有四个进程返回,还是只有一个进程这样做,因为我们只给了池一个参数? 如果是前者:那会不会比仅仅拥有一个人慢呢?那记忆力呢?我们将进程1的结果保存到进程4返回RAM还是被打印出来?

        print(pool.map(f, range(10)))       # prints "[0, 1, 4,..., 81]"
        it = pool.imap(f, range(10))
        print(next(it))                     # prints "0"
        print(next(it))                     # prints "1"
        print(it.next(timeout=1))           # prints "4" unless your computer is *very* slow
        result = pool.apply_async(time.sleep, (10,))
        print(result.get(timeout=1))        # raises multiprocessing.TimeoutError

0 个答案:

没有答案
相关问题