欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python多线程中多参数问题

程序员文章站 2022-03-02 19:25:25
...

要注意的一点是:传递给进程的参数必须是可序列化的,常见的数据类型都是可序列化的,自定义的类一般是不可序列化的,(在java中有将自定类写为可序列化的方式,不知道python中有没有,懒得查了)如果需要在进程中使用自定义类的对象,而不想多次初始化,可以将自定义类对象设为全局变量。(下面方式一的 [解决办法] 链接中我曾这样试过是可以的)

方式一:每个进程使用不同的参数 x 和相同的参数 y

def work(x, y):
    return x + y
    
from functools import partial
x = [1,2,3,4,5]
partial_work = partial(work, y=1)    # 提取x作为partial函数的输入变量
results = pool.map(partial_work, x)

这种情况也可以把 y 设置为全局变量,参见我的另一篇文章中的 解决方法

方式二:每个进程使用不同的参数x、y

def work(x_y):
    x = x_y[0]
    y = x_y[1]
    return x + y

x = [1,2,3,4,5,6]
y = [1,1,1,1,1,1]
x_y = zip(x, y)                     # 可以使用多个参数,只要保证每个参数长度相同,都是可迭代的即可
results = pool.map(work, x_y)

方式三:每个进程使用不同的参数 x、y

def work(x, y):
    return x + y

from pathos.multiprocessing import ProcessingPoll as Pool
pool = Pool(4)
results = pool.map(work, x, y)