multithreading多进程的使用

2019-04-09  本文已影响0人  好小葱1

先了解一下主要的关键点:

    p1.start()
    p2.start()
    p3.start()

    p3.join()  # join(p)
    p1.join() #join(p)
    p2.join() #join(p)
    '''而我们p1.join()是在等p1结束,没错p1只要不结束主线程就会一直卡在原地这也是问题的关键
join是让主线程等,而p1-p3仍然是并发执行的,p1.join的时候,其余p2,p3仍然在运行,等
#p1.join结束,可能p2,p3早已经结束了,这样p2.join,p3.join直接通过检测,无需等待
所以3个join花费的总时间仍然是耗费时间最长的那个进程运行的时间'''
    # 可以简写为:
    p_l=[p1,p2,p3]
    for p in p_l:
        p.start()

Process.PID中保存有PID,如果进程还没有start(),则PID为None。

进程池

    import multiprocessing

    PROCESSES = 4
    print 'Creating pool with %d processes\n' % PROCESSES
    pool = multiprocessing.Pool(PROCESSES)  # 默认系统的cpu个数
    print 'pool = %s' % pool
    print

    #
    # Tests
    #

    TASKS = [(mul, (i, 7)) for i in range(10)] + \
            [(plus, (i, 8)) for i in range(10)]

    results = [pool.apply_async(calculate, t) for t in TASKS]
    imap_it = pool.imap(calculatestar, TASKS)
    imap_unordered_it = pool.imap_unordered(calculatestar, TASKS)

    print 'Ordered results using pool.apply_async():'
    for r in results:
        print '\t', r.get()      # 需要使用get方法获取执行结果
    print

    print 'Ordered results using pool.imap():'
    for x in imap_it:
        print '\t', x
    print

    print 'Unordered results using pool.imap_unordered():'
    for x in imap_unordered_it:
        print '\t', x
    print

    print 'Ordered results using pool.map() --- will block till complete:'
    for x in pool.map(calculatestar, TASKS):
        print '\t', x
    print

Pipe 和 Queue

多进程、多线程、协程、GIL全局锁结合Python的理解

Python GIL、多进程、多线程.png
上一篇 下一篇

猜你喜欢

热点阅读