python - 为什么python多进程池比单进程慢?

标签 python threadpool python-multiprocessing

time_1 = time.time()
num = 1000000
for i in range(num):
    print i
time_2 = time.time()
print time_2 - time_1

13.1949999332

def time_test_pool(num):
    print num

if __name__ == "__main__":
    time_1 = time.time()
    num = 1000000
    pool = ThreadPool(8)
    pool.map(time_test_pool, range(num))
    pool.close()
    pool.join()
    time_2 = time.time()
    print time_2 - time_1

15.8250000477

我是否误解了pool的用法?为什么池这么慢?

最佳答案

Python 线程实际上并不是并行运行,而是按时间切片运行。原因是因为python解释器不是线程安全的。

也就是说,当您需要执行大量 IO 密集型任务时,Python 线程很方便,但在尝试执行 CPU 密集型任务(例如您的任务)时,它只会增加开销。

解决方案通常使用 python.multiprocess (请参阅 python multi-threading slower than serial? ),但是在您的情况下,我不确定它会改善情况,因为您每个线程所做的工作量是很少,你唯一需要付出的就是上下文切换。

尝试为每个线程分配更多迭代,或者考虑使用支持真正多线程的 C++。

关于python - 为什么python多进程池比单进程慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33969151/

相关文章:

python - *不*重置 pandas 中的 groupby 索引的用例有哪些

python - 在 pandas 索引对象上运行内置方法时出现奇怪的错误

c# - 如何确定 ThreadPool 队列中的项目数

Python 在池映射中使用列表/多个参数

python - 并行化Python列表理解并没有提高性能

python - Python 中的多处理 : how to implement a loop over "apply_async" as "map_async" using a callback function

python - 迭代列表项时减少列表的长度

python - 替换python中的 '\'字符

java - 如何从线程池中获取线程 ID?

java - 使用线程池查询远程数据库