Python multiprocessing PicklingError: Can't pickle

前端 未结 8 736
故里飘歌
故里飘歌 2020-11-22 03:48

I am sorry that I can\'t reproduce the error with a simpler example, and my code is too complicated to post. If I run the program in IPython shell instead of the regular Pyt

8条回答
  •  借酒劲吻你
    2020-11-22 04:24

    When this problem comes up with multiprocessing a simple solution is to switch from Pool to ThreadPool. This can be done with no change of code other than the import-

    from multiprocessing.pool import ThreadPool as Pool
    

    This works because ThreadPool shares memory with the main thread, rather than creating a new process- this means that pickling is not required.

    The downside to this method is that python isn't the greatest language with handling threads- it uses something called the Global Interpreter Lock to stay thread safe, which can slow down some use cases here. However, if you're primarily interacting with other systems (running HTTP commands, talking with a database, writing to filesystems) then your code is likely not bound by CPU and won't take much of a hit. In fact I've found when writing HTTP/HTTPS benchmarks that the threaded model used here has less overhead and delays, as the overhead from creating new processes is much higher than the overhead for creating new threads.

    So if you're processing a ton of stuff in python userspace this might not be the best method.

提交回复
热议问题