耗时许久,终于在不断理解和试错中解决了此Bug!!

原代码是这样的:

def setup_generator(processes=None, batch_size=10, cg=None):

    def init_worker():
        signal.signal(signal.SIGINT, signal.SIG_IGN)

    global pool
    try:
        pool.terminate()
    except:
        pass

此时会出现multiprocessing.Pool()传来的类似于can’t pickle的报错。

于是我按照参考文献的思路,将引起错误的函数以及相关变量提到了外面,如下面的代码所示:

# 提到外面的 worker 函数
def init_worker():
    signal.signal(signal.SIGINT, signal.SIG_IGN)

# 在外面定义 pool 变量
global pool
pool = None

def setup_generator(processes=None, batch_size=10, cg=None):

    global pool
    try:
        pool.terminate()
    except:
        pass

然后就很神奇地Debug了。

供大家参考,祝大家少遇Bug!

参考文献:彻底解决python多进程can‘t pickle问题_python_七哥地盘-GitCode 开源社区 (csdn.net)icon-default.png?t=N7T8https://gitcode.csdn.net/65e7d05c1a836825ed788f85.html?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MTI0NzU3NSwiZXhwIjoxNzEwNjgyODMxLCJpYXQiOjE3MTAwNzgwMzEsInVzZXJuYW1lIjoibTBfNjY5NzcyNTcifQ.5VNFs2Pgx4evfxv0opiiy4RZ3fepTR5CtCIzzbT9tZI

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐