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)