相关疑难解决方法(0)

Python中混合多处理和线程的现状

关于问题6721,在Linux中的同一个python应用程序中使用多处理和用户线程的最佳实践或解决方法是什么,python标准库中的锁应该在fork上清理?

为什么我需要两者?我使用子进程进行大量计算,产生的数据结构太大而无法通过队列返回 - 而是必须立即将它们存储到磁盘中.通过单独的线程监视这些子进程中的每一个似乎是有效的,因此在完成时,线程可以处理将大(例如多GB)数据读回到进程中的IO,其中需要结果以进一步计算.与其他子进程的结果相结合.子进程会间歇性地挂起,我只是(经过大量的冲击)发现是由于使用了日志记录模块而导致的.其他人在这里记录了这个问题:

https://twiki.cern.ch/twiki/bin/view/Main/PythonLoggingThreadingMultiprocessingIntermixedStudy

这指出了这个明显未解决的python问题:python标准库中的锁应该在fork上进行清理; http://bugs.python.org/issue6721

对我追踪到的困难感到震惊,我回答说:

是否有任何理由不在Python中混合使用Multiprocessing和Threading模块

有一个相当无益的建议'小心'并链接到上述.

但是冗长的讨论:问题6721表明在同一个应用程序中使用多处理(或os.fork)和用户线程是一个"错误".由于我对这个问题的理解有限,我在讨论中发现了太多的分歧,无法总结在同一个应用程序中使用多处理和线程的解决方法或策略.我的直接问题是通过禁用日志记录来解决的,但我在父进程和子进程中都创建了少量其他(显式)锁,并且怀疑我正在为自己的进一步间歇性死锁做好准备.

在python(2.7,3.2,3.3)应用程序中使用线程和多处理时,是否可以提供实用建议以避免在使用锁和/或日志记录模块时发生死锁?

python logging multithreading multiprocessing locks

23
推荐指数
1
解决办法
7224
查看次数

标签 统计

locks ×1

logging ×1

multiprocessing ×1

multithreading ×1

python ×1