How to troubleshoot an “AttributeError: __exit__” in multiproccesing in Python?

后端 未结 4 672
执笔经年
执笔经年 2020-12-13 22:41

I tried to rewrite some csv-reading code to be able to run it on multiple cores in Python 3.2.2. I tried to use the Pool object of multiprocessing, which I adap

相关标签:
4条回答
  • 2020-12-13 23:23

    The error also happens when trying to use the

    with multiprocessing.Pool() as pool:
       # ...
    

    with a Python version that is too old (like Python 2.X) and does not support using with together with multiprocessing pools.

    (See this answer https://stackoverflow.com/a/25968716/1426569 to another question for more details)

    0 讨论(0)
  • 2020-12-13 23:27

    The problem is in this line:

    with pattern.findall(row) as f:
    

    You are using the with statement. It requires an object with __enter__ and __exit__ methods. But pattern.findall returns a list, with tries to store the __exit__ method, but it can't find it, and raises an error. Just use

    f = pattern.findall(row)
    

    instead.

    0 讨论(0)
  • 2020-12-13 23:38

    It is not the asker's problem in this instance but the first troubleshooting step for a generic "AttributeError: __exit__" should be making sure the brackets are there, e.g.

    with SomeContextManager() as foo:
        #works because a new object is referenced...
    

    not

    with SomeContextManager as foo:
        #AttributeError because the class is referenced
    

    Catches me out from time to time and I end up here -__-

    0 讨论(0)
  • 2020-12-13 23:47

    The reason behind this error is : Flask app is already running, hasn't shut down and in middle of that we try to start another instance by: with app.app_context(): #Code Before we use this with statement we need to make sure that scope of the previous running app is closed.

    0 讨论(0)
提交回复
热议问题