Python并发:线程和锁(2)
如果你选择使用Python中的原生线程模型,你可能会惊喜地发现logging模块不仅是线程安全的,而且还支持从任何特定线程或进程进行日志记录(示例在logging手册)。然后,难点是在你的应用程序中哪里更可能触发异常,这如何影响你的线程模型以及确保在这些代码段周围进行可靠的日志记录。将日志添加到你的应用可能会产生不小的延迟,正如pylint通过警告模块logging-lazy-interpolation通知你那样,这也可能会给你的线程模型带来困难。 concurrent.futures 在撰写这篇文章时发现Python multiprocessing.pool.ThreadPool实现从未被记录或测试过,因为它从未完成,这让我感觉非常不愉快。它在Python3.7中仍然还是这样,因为它出现在GitHub镜像的源代码中。鉴于全局解释器锁的无所不在,以及未来并发程序主要是并行I/O相关的工作,使用Python3.x中提供的像concurrent.futures.Executor或类似的新异步模式可能更有意义,因为他们更全面。我没有使用过这个模块,但我想与multiprocessing相比,它不会产生显着的性能损耗。 结论 Python对线程和锁具有基本的支持,它可能不像其他语言(例如Java)中的线程和锁那样功能全面且有用。在使用像Python等更高级别的解释语言进行操作时,最好避免使用线程和锁。然而,Python确实提供了关于线程和锁定的足够友好的曝光度,以便对线程和锁的工作方式进行良好的学术练习,也给并发界提供了激动人心的介绍。 英文原文:https://bytes.yingw787.com/posts/2019/01/12/concurrency_with_python_threads_and_locks/ 译者:南宫云遥 【编辑推荐】
点赞 0 (编辑:ASP站长网) |