簡體   English   中英

KeyError:0在python中使用多處理

[英]KeyError: 0 using multiprocessing in python

我有以下代碼,我嘗試調用函數compute_cluster進行一些計算並將結果寫入txt文件(每個進程獨立地將結果寫入不同的txt文件),但是,當我運行以下代碼時:

def main():
  p = Pool(19)
  p.map(compute_cluster, [(l, r) for l in range(6, 25) for r in range(1, 4)]) 
  p.close()
if __name__ == "__main__":
   main()                

它崩潰時出現以下錯誤:

File "RMSD_calc.py", line 124, in <module>
  main()                
File "RMSD_calc.py", line 120, in main
  p.map(compute_cluster, [(l, r) for l in range(6, 25) for r in range(1, 4)]) 
File "/usr/local/lib/python2.7/multiprocessing/pool.py", line 225, in map
  return self.map_async(func, iterable, chunksize).get()
File "/usr/local/lib/python2.7/multiprocessing/pool.py", line 522, in get
  raise self._value
  KeyError: 0

當我在網上搜索“KeyError:0”的含義時,我沒有找到任何有用的信息,所以任何有關此錯誤發生的建議都非常感謝

KeyError發生在compute_cluster()中的一個子進程和p.map() reraises為您在父:

from multiprocessing import Pool

def f(args):
    d = {}
    d[0] # <-- raises KeyError

if __name__=="__main__":
    p = Pool()
    p.map(f, [None])

產量

Traceback (most recent call last):
  File "raise-exception-in-child.py", line 9, in <module>
    p.map(f, [None])
  File "/usr/lib/python2.7/multiprocessing/pool.py", line 227, in map
    return self.map_async(func, iterable, chunksize).get()
  File "/usr/lib/python2.7/multiprocessing/pool.py", line 528, in get
    raise self._value
KeyError: 0

要查看完整的回溯,請在子進程中捕獲異常:

import logging
from multiprocessing import Pool

def f(args):
    d = {}
    d[0] # <-- raises KeyError

def f_mp(args):
    try:
        return f(args)
    except Exception:
        logging.exception("f(%r) failed" % (args,))

if __name__=="__main__":
    p = Pool()
    p.map(f_mp, [None])

產量

ERROR:root:f(None) failed
Traceback (most recent call last):
  File "raise-exception-in-child.py", line 10, in f_mp
    return f(args)
  File "raise-exception-in-child.py", line 6, in f
    d[0] # <-- raises KeyError
KeyError: 0

它表明d[0]引起了異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM