python多线程 内存错误?
巴扎黑
巴扎黑 2017-04-18 09:33:38
[Python讨论组]

代码:

pool = ThreadPool(3)
results = pool.map(main, articles)
pool.close()
pool.join()

错误提示:

python(32471,0x700000501000) malloc: *** error for object 0x7fef9ade6da0: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
[1]    32471 abort      python thread_main.py
(py3) 

是内存错误还是啥意思? Macbook air

巴扎黑
巴扎黑

全部回复(1)
黄舟

单看log信息只能得出是内存分配的问题

不知道你是的main是 CPU 密集型还是 IO 密集型

  • CPU 密集型

from multiprocessing import Pool, cpu_count


def main(i):
    print("{}: hello world!".format(i))

if __name__ == "__main__":
    pool = Pool(cpu_count())
    pool.map(main, (i for i in range(10000)))
    pool.close()
    pool.join()
  • IO 密集型

from multiprocessing.dummy import Pool as ThreadPool
from multiprocessing import cpu_count


def main(i):
    print("{}: hello world!".format(i))

if __name__ == "__main__":
    pool = ThreadPool(cpu_count())
    pool.map(main, (i for i in range(10000)))
    pool.close()
    pool.join()
    

两者分不清楚怎么办, 写两种代码, 反正改动小, 写完自己测一测时间, 哪个快用哪个

猜测你这个应该是 CPU 密集型, 应该用多进程, 而不是多线程

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号