Python多线程最佳实践

我刚刚阅读了一篇关于Python中GIL(全局解释器锁)的文章。 当谈到Python性能时,这似乎是一个大问题。 所以我想知道自己最好的做法是存档更多的表现。 它是线程还是多处理? 因为我听到每个人都说一些不同的东西,所以最好有一个明确的答案。 或者至少要知道多线程对多处理的优缺点。

亲切的问候,

短剑


它取决于应用程序以及您正在使用的python实现。

在CPython(参考实现)和pypy中,GIL一次只允许一个线程执行Python字节码。 其他线程可能正在做I / O或运行用C语言编写的扩展。

值得注意的是,IronPython和JPython等其他一些实现没有GIL。

线程的特点是所有线程共享相同的解释器和所有活动对象。 所以线程几乎可以无需额外的努 不过,您需要使用锁定来序列化数据访问。 想象一下,如果两个线程会尝试修改相同的列表会发生什么。

多处理实际上运行在不同的进程中。 这避开了GIL,但是如果大量数据需要在数据必须被酸洗并通过IPC传输到另一个进程的进程之间共享,那么它必须再次取消。 多处理模块可以为您处理凌乱的细节,但仍会增加开销。

因此,如果您的程序想要并行运行Python代码,但不需要在实例之间共享大量数据(例如只需要处理文件的文件名),那么多处理是一个不错的选择。

目前多处理是我知道在标准库中同时使用CPU的所有内核的唯一方式。

另一方面,如果您的任务需要共享大量数据,并且大部分处理都是以扩展或I / O方式完成的,则线程处理将是一个不错的选择。

链接地址: http://www.djcxy.com/p/55217.html

上一篇: Python multithreading best practices

下一篇: Python threads don't run simultaneously