将项目列表传递给多处理函数

Rod*_*d0n 6 python python-multiprocessing

我有以下功能:

def create_job(target, args):
    p = multiprocessing.Process(target=target, args=args)
    p.start()
    return p
Run Code Online (Sandbox Code Playgroud)

上面的函数被调用:

ps = create_job(mc.collect_categories, (cat_ids),)
Run Code Online (Sandbox Code Playgroud)

作为 cat_ids 'ids' 列表:['ML68', 'MA453','MA33']

当我运行代码时,出现以下错误(包含 10 个 cat_ids 的列表):

TypeError: collect_categories() takes exactly 2 arguments (11 given)
Run Code Online (Sandbox Code Playgroud)

我尝试用“*”传递值来解压它,但这不是问题。

unu*_*tbu 8

(cat_ids)与 相同cat_ids。相反,使用(cat_ids, )一个元素来表示一个元组:

ps = create_job(mc.collect_categories, (cat_ids, ),)
Run Code Online (Sandbox Code Playgroud)

或者,您可以create_job 使用*args以下方式定义:

def create_job(target, *args):
    p = multiprocessing.Process(target=target, args=args)
    p.start()
    return p
Run Code Online (Sandbox Code Playgroud)

并致电create_job

ps = create_job(mc.collect_categories, cat_ids)
Run Code Online (Sandbox Code Playgroud)

在内部create_job,变量args将是传递给的所有位置参数(第一个除外)的元组create_job——正是您想要传递给的Process