您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python中的并行性无法正常工作

python中的并行性无法正常工作

David Beazley在PyCon 2010上发表了关于此问题的演讲。正如其他人已经指出的那样,对于某些任务,尤其是对多核使用线程可能会导致性能比单线程执行的同一任务慢。Beazley发现,问题与多个内核发生了“ GIL之战”有关

在此处输入图片说明

为避免GIL争用,让任务在单独的进程而不是单独的线程中运行可能会获得更好的结果。在多处理模块提供了一个方便的方式来做到这一点特别是因为多处理API是非常相似的线程API。

import multiprocessing as mp
import datetime as dt
def work():
    t = dt.datetime.Now()
    print mp.current_process().name, t
    i = 0
    while i < 100000000:
        i+=1
    t2 = dt.datetime.Now()
    print mp.current_process().name, t2, t2-t

if __name__ == '__main__': 
    print "single process:"
    t1 = mp.Process(target=work)
    t1.start()
    t1.join()

    print "multi process:"
    t1 = mp.Process(target=work)
    t1.start()
    t2 = mp.Process(target=work)
    t2.start()
    t1.join()
    t2.join()

产量

single process:
Process-1 2011-12-06 12:34:20.611526
Process-1 2011-12-06 12:34:28.494831 0:00:07.883305
multi process:
Process-3 2011-12-06 12:34:28.497895
Process-2 2011-12-06 12:34:28.503433
Process-2 2011-12-06 12:34:36.458354 0:00:07.954921
Process-3 2011-12-06 12:34:36.546656 0:00:08.048761

PS。正如zeekay在评论中指出的那样,GIL之战仅对cpu密集型任务而言是严峻的。对于IO绑定的任务来说应该不是问题。

python 2022/1/1 18:42:36 有274人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶