【问题标题】:Thread Pool giving OSError: [Errno 12] Cannot allocate memory线程池给出 OSError: [Errno 12] 无法分配内存
【发布时间】:2017-04-27 15:16:46
【问题描述】:

代码顺利运行了一段时间,然后突然出现OSError: [Errno 12] Cannot allocate memory

def initialize(site):
    global pool

    if site == 'OT':
        for jobId in JobIdsOT:
            argumentList = [jobId, site]
            pool.map(assignTask, [argumentList])            

    elif site == 'LI':                
        for jobId in JobIdsLI:
            argumentList = [jobId, site]
            pool.map(assignTask, [argumentList]) 

堆栈跟踪:

Traceback (most recent call last):
  File "LogDumper.py", line 301, in <module>
    main()
  File "LogDumper.py", line 58, in main
    initialize('OT')
  File "LogDumper.py", line 78, in initialize
    pool.map(assignTask, [argumentList])            
  File "/usr/lib64/python2.6/multiprocessing/pool.py", line 148, in map
    return self.map_async(func, iterable, chunksize).get()
  File "/usr/lib64/python2.6/multiprocessing/pool.py", line 422, in get
    raise self._value
OSError: [Errno 12] Cannot allocate memory

我提到了这个问题Python cannot allocate memory using multiprocessing.pool。但我不确定解决方案。

如何解决上述问题?

【问题讨论】:

    标签: python out-of-memory threadpool


    【解决方案1】:

    改为。

    for jobId in JobIdsOT:
            argumentList.append( (jobId, site) )
     pool.map(assignTask, argumentList)  
    

    pool.map(... 只需要一个 iterable 并且对于所有作业只需要调用一次。

    【讨论】:

      猜你喜欢
      • 2015-05-04
      • 1970-01-01
      • 2010-11-24
      • 1970-01-01
      • 2013-08-01
      • 2017-07-23
      • 1970-01-01
      • 2010-11-16
      • 2019-08-23
      相关资源
      最近更新 更多