函数中的python多处理池具有多个输入参数,但只有一个iterable
我有一个具有多个参数的函数,iterable_标记、dataframe、label_数组。但是,函数中只有iterable_标记是iterable函数中的python多处理池具有多个输入参数,但只有一个iterable,python,python-multiprocessing,python-pool,Python,Python Multiprocessing,Python Pool,我有一个具有多个参数的函数,iterable_标记、dataframe、label_数组。但是,函数中只有iterable_标记是iterable def cross_tab(label,token_presence): A_token=0 B_token=0 C_token=0 D_token=0 for i,j in zip(list(label),list(token_presence)): if i==True and j==Tru
def cross_tab(label,token_presence):
A_token=0
B_token=0
C_token=0
D_token=0
for i,j in zip(list(label),list(token_presence)):
if i==True and j==True:
A_token+=1
elif i==False and j==False:
D_token+=1
elif i==True and j==False:
C_token+=1
elif i==False and j==True:
B_token+=1
return A_token,B_token,C_token,D_token
def My_ParallelFunction(iterable_token,dataframe,label_array):
A={}
B={}
C={}
D={}
token_count={}
token_list=[]
token_presence_sum=0
i=0
for token in iterable_token:
try:
token_presence=dataframe['Master'].str.contains('\\b'+token+'\\b')
token_presence_sum=sum(token_presence)
if token_presence_sum:
A_token,B_token,C_token,D_token=cross_tab(label_array,token_presence)
A[token]=A_token
B[token]=B_token
C[token]=C_token
D[token]=D_token
token_count[token]=token_presence_sum
token_list.append(token)
except Exception as e:
pass
return (A,B,C,D,token_count,token_list)
import multiprocessing as mp
with mp.Pool(mp.cpu_count()) as p:
results = p.starmap(My_ParallelFunction, (iterable_token, dataframe,label_array))
from multiprocessing import Pool
def My_ParallelFunction(iterable_token,dataframe,label_array):
def get_token_counts(token,dataframe,label_array):
try:
token_presence=dataframe['Master'].str.contains('\\b'+token+'\\b')
token_presence_sum=sum(token_presence)
if token_presence_sum:
A_token,B_token,C_token,D_token=cross_tab(label_array,token_presence)
return token,A_token,B_token,C_token,D_token
except Exception as e:
print(e)
pass
A={}
B={}
C={}
D={}
token_count={}
token_list=[]
token_presence_sum=0
i=0
with Pool() as p:
p_results = p.starmap(get_token_counts, [(token, dataframe, label_array) for token in iterable_token])
for res in p_results:
if res is None:
continue
token,A_token,B_token,C_token,D_token = res
A[token]=A_token
B[token]=B_token
C[token]=C_token
D[token]=D_token
token_count[token]=token_presence_sum
token_list.append(token)
return (A,B,C,D,token_count,token_list)
如何并行化我的_parallel函数
Edit1:我尝试了示例1中建议的方法,因为这就是我想要的,并行化函数
def cross_tab(label,token_presence):
A_token=0
B_token=0
C_token=0
D_token=0
for i,j in zip(list(label),list(token_presence)):
if i==True and j==True:
A_token+=1
elif i==False and j==False:
D_token+=1
elif i==True and j==False:
C_token+=1
elif i==False and j==True:
B_token+=1
return A_token,B_token,C_token,D_token
def My_ParallelFunction(iterable_token,dataframe,label_array):
A={}
B={}
C={}
D={}
token_count={}
token_list=[]
token_presence_sum=0
i=0
for token in iterable_token:
try:
token_presence=dataframe['Master'].str.contains('\\b'+token+'\\b')
token_presence_sum=sum(token_presence)
if token_presence_sum:
A_token,B_token,C_token,D_token=cross_tab(label_array,token_presence)
A[token]=A_token
B[token]=B_token
C[token]=C_token
D[token]=D_token
token_count[token]=token_presence_sum
token_list.append(token)
except Exception as e:
pass
return (A,B,C,D,token_count,token_list)
import multiprocessing as mp
with mp.Pool(mp.cpu_count()) as p:
results = p.starmap(My_ParallelFunction, (iterable_token, dataframe,label_array))
from multiprocessing import Pool
def My_ParallelFunction(iterable_token,dataframe,label_array):
def get_token_counts(token,dataframe,label_array):
try:
token_presence=dataframe['Master'].str.contains('\\b'+token+'\\b')
token_presence_sum=sum(token_presence)
if token_presence_sum:
A_token,B_token,C_token,D_token=cross_tab(label_array,token_presence)
return token,A_token,B_token,C_token,D_token
except Exception as e:
print(e)
pass
A={}
B={}
C={}
D={}
token_count={}
token_list=[]
token_presence_sum=0
i=0
with Pool() as p:
p_results = p.starmap(get_token_counts, [(token, dataframe, label_array) for token in iterable_token])
for res in p_results:
if res is None:
continue
token,A_token,B_token,C_token,D_token = res
A[token]=A_token
B[token]=B_token
C[token]=C_token
D[token]=D_token
token_count[token]=token_presence_sum
token_list.append(token)
return (A,B,C,D,token_count,token_list)
但错误消息是
RemoteTraceback Traceback (most recent call last)
RemoteTraceback:
"""
Traceback (most recent call last):
File "/usr/lib/python3.6/multiprocessing/pool.py", line 119, in worker
result = (True, func(*args, **kwds))
File "/usr/lib/python3.6/multiprocessing/pool.py", line 47, in starmapstar
return list(itertools.starmap(args[0], args[1]))
TypeError: My_ParallelFunction() takes 3 positional arguments but 949 were given
"""
The above exception was the direct cause of the following exception:
TypeError Traceback (most recent call last)
<timed exec> in <module>
/usr/lib/python3.6/multiprocessing/pool.py in starmap(self, func, iterable, chunksize)
272 `func` and (a, b) becomes func(a, b).
273 '''
--> 274 return self._map_async(func, iterable, starmapstar, chunksize).get()
275
276 def starmap_async(self, func, iterable, chunksize=None, callback=None,
/usr/lib/python3.6/multiprocessing/pool.py in get(self, timeout)
642 return self._value
643 else:
--> 644 raise self._value
645
646 def _set(self, i, obj):
TypeError: My_ParallelFunction() takes 3 positional arguments but 949 were given
编辑3这是我正在使用的解决方案
def My_ParallelFunction(iterable_token,dataframe,label_array):
A={}
B={}
C={}
D={}
token_count={}
token_list=[]
i=0
with mp.Pool(4) as p:
token_result = p.starmap(_loop,[(token, dataframe, label_array,A,B,C,D,token_count,token_list) for token in iterable_token])
#print(token_result[0])
return token_result#(A,B,C,D,token_count,token_list)
def _loop(token, dataframe, label_array,A,B,C,D,token_count,token_list):
#print(token)
try:
token_presence=dataframe['Master'].str.contains('\\b'+token+'\\b')
token_presence_sum=sum(token_presence)
#print(token_presence_sum)
if token_presence_sum:
A_token,B_token,C_token,D_token=cross_tab(label_array,token_presence)
#print('token,A_token,B_token,C_token,D_token',token,A_token,B_token,C_token,D_token)
A[token]=A_token
B[token]=B_token
C[token]=C_token
D[token]=D_token
token_count[token]=token_presence_sum
token_list.append(token)
# print('token_list:',token_list)
except Exception as e:
pass
return A,B,C,D,token_count,token_list
然而,它并没有给我想要的结果。这是一个949 X 6 X不同大小的矩阵这里有两个玩具示例,演示如何并行化类似的函数
def cross_tab(label,token_presence):
A_token=0
B_token=0
C_token=0
D_token=0
for i,j in zip(list(label),list(token_presence)):
if i==True and j==True:
A_token+=1
elif i==False and j==False:
D_token+=1
elif i==True and j==False:
C_token+=1
elif i==False and j==True:
B_token+=1
return A_token,B_token,C_token,D_token
def My_ParallelFunction(iterable_token,dataframe,label_array):
A={}
B={}
C={}
D={}
token_count={}
token_list=[]
token_presence_sum=0
i=0
for token in iterable_token:
try:
token_presence=dataframe['Master'].str.contains('\\b'+token+'\\b')
token_presence_sum=sum(token_presence)
if token_presence_sum:
A_token,B_token,C_token,D_token=cross_tab(label_array,token_presence)
A[token]=A_token
B[token]=B_token
C[token]=C_token
D[token]=D_token
token_count[token]=token_presence_sum
token_list.append(token)
except Exception as e:
pass
return (A,B,C,D,token_count,token_list)
import multiprocessing as mp
with mp.Pool(mp.cpu_count()) as p:
results = p.starmap(My_ParallelFunction, (iterable_token, dataframe,label_array))
from multiprocessing import Pool
def My_ParallelFunction(iterable_token,dataframe,label_array):
def get_token_counts(token,dataframe,label_array):
try:
token_presence=dataframe['Master'].str.contains('\\b'+token+'\\b')
token_presence_sum=sum(token_presence)
if token_presence_sum:
A_token,B_token,C_token,D_token=cross_tab(label_array,token_presence)
return token,A_token,B_token,C_token,D_token
except Exception as e:
print(e)
pass
A={}
B={}
C={}
D={}
token_count={}
token_list=[]
token_presence_sum=0
i=0
with Pool() as p:
p_results = p.starmap(get_token_counts, [(token, dataframe, label_array) for token in iterable_token])
for res in p_results:
if res is None:
continue
token,A_token,B_token,C_token,D_token = res
A[token]=A_token
B[token]=B_token
C[token]=C_token
D[token]=D_token
token_count[token]=token_presence_sum
token_list.append(token)
return (A,B,C,D,token_count,token_list)
第一种选择。如果您想并行化整个函数。你可以用。starmap的工作原理与map类似,但您可以向其传递多个参数
from multiprocessing import Pool
import time
#Example 1 Simple function parallelization
def f(a,b,c,_list):
x = a+b+c
time.sleep(1)
_list.append(x)
return _list
inputs = [
(1,2,3,['a','b','c']),
(1,2,3,['d','e','f']),
(1,2,3,['x','y','z']),
(1,2,3,['A','B','C']),
]
start = time.time()
with Pool(4) as p:
results = p.starmap(f, inputs)
end = time.time()
for r in results:
print(r)
print(f'done in {round(end-start, 3)} seconds')
输出:
['a', 'b', 'c', 6]
['d', 'e', 'f', 6]
['x', 'y', 'z', 6]
['A', 'B', 'C', 6]
done in 1.084 seconds
['a*', 'b*', 'c*', '6*']
done in 1.048 seconds
第二种选择。如果只想并行化函数中的for循环。在这种情况下,您应该将循环重写为函数,并使用Pool.map或Pool.starmap调用它
#Example 2. Function calling a parallel function
#loop
def g(_string):
time.sleep(1)
return _string + '*'
#outer function
def f(a,b,c,_list):
x = a+b+c
_list.append(str(x))
#loop parallelization
with Pool(4) as p:
new_list = p.map(g, _list)
return new_list
start = time.time()
result = f(1,2,3,['a','b','c'])
end = time.time()
print(result)
print(f'done in {round(end-start, 3)} seconds')
输出:
['a', 'b', 'c', 6]
['d', 'e', 'f', 6]
['x', 'y', 'z', 6]
['A', 'B', 'C', 6]
done in 1.084 seconds
['a*', 'b*', 'c*', '6*']
done in 1.048 seconds
注意,loop函数包含处理iterable的单个元素的逻辑。Pool.map将负责为所有元素运行它
time.sleep1调用是为了模拟一些耗时的计算。如果并行化工作正常,您应该能够在1秒而不是4秒内处理4个输入
下面是使用您的代码的示例:
def My_ParallelFunction(iterable_token, dataframe, label_array):
with mp.Pool(4) as p:
token_result = p.starmap(
_loop,
[(token, dataframe, label_array) for token in iterable_token]
)
return token_result
def _loop(token, dataframe, label_array):
A={}
B={}
C={}
D={}
token_count = {}
token_list = []
try:
token_presence=dataframe['Master'].str.contains('\\b'+token+'\\b')
token_presence_sum=sum(token_presence)
if token_presence_sum:
A_token, B_token, C_token, D_token = cross_tab(label_array, token_presence)
A[token]=A_token
B[token]=B_token
C[token]=C_token
D[token]=D_token
token_count[token]=token_presence_sum
token_list.append(token)
return A,B,C,D,token_count,token_list
except Exception as e:
print(e)
下面是两个玩具示例,演示如何并行化类似的函数
def cross_tab(label,token_presence):
A_token=0
B_token=0
C_token=0
D_token=0
for i,j in zip(list(label),list(token_presence)):
if i==True and j==True:
A_token+=1
elif i==False and j==False:
D_token+=1
elif i==True and j==False:
C_token+=1
elif i==False and j==True:
B_token+=1
return A_token,B_token,C_token,D_token
def My_ParallelFunction(iterable_token,dataframe,label_array):
A={}
B={}
C={}
D={}
token_count={}
token_list=[]
token_presence_sum=0
i=0
for token in iterable_token:
try:
token_presence=dataframe['Master'].str.contains('\\b'+token+'\\b')
token_presence_sum=sum(token_presence)
if token_presence_sum:
A_token,B_token,C_token,D_token=cross_tab(label_array,token_presence)
A[token]=A_token
B[token]=B_token
C[token]=C_token
D[token]=D_token
token_count[token]=token_presence_sum
token_list.append(token)
except Exception as e:
pass
return (A,B,C,D,token_count,token_list)
import multiprocessing as mp
with mp.Pool(mp.cpu_count()) as p:
results = p.starmap(My_ParallelFunction, (iterable_token, dataframe,label_array))
from multiprocessing import Pool
def My_ParallelFunction(iterable_token,dataframe,label_array):
def get_token_counts(token,dataframe,label_array):
try:
token_presence=dataframe['Master'].str.contains('\\b'+token+'\\b')
token_presence_sum=sum(token_presence)
if token_presence_sum:
A_token,B_token,C_token,D_token=cross_tab(label_array,token_presence)
return token,A_token,B_token,C_token,D_token
except Exception as e:
print(e)
pass
A={}
B={}
C={}
D={}
token_count={}
token_list=[]
token_presence_sum=0
i=0
with Pool() as p:
p_results = p.starmap(get_token_counts, [(token, dataframe, label_array) for token in iterable_token])
for res in p_results:
if res is None:
continue
token,A_token,B_token,C_token,D_token = res
A[token]=A_token
B[token]=B_token
C[token]=C_token
D[token]=D_token
token_count[token]=token_presence_sum
token_list.append(token)
return (A,B,C,D,token_count,token_list)
第一种选择。如果您想并行化整个函数。你可以用。starmap的工作原理与map类似,但您可以向其传递多个参数
from multiprocessing import Pool
import time
#Example 1 Simple function parallelization
def f(a,b,c,_list):
x = a+b+c
time.sleep(1)
_list.append(x)
return _list
inputs = [
(1,2,3,['a','b','c']),
(1,2,3,['d','e','f']),
(1,2,3,['x','y','z']),
(1,2,3,['A','B','C']),
]
start = time.time()
with Pool(4) as p:
results = p.starmap(f, inputs)
end = time.time()
for r in results:
print(r)
print(f'done in {round(end-start, 3)} seconds')
输出:
['a', 'b', 'c', 6]
['d', 'e', 'f', 6]
['x', 'y', 'z', 6]
['A', 'B', 'C', 6]
done in 1.084 seconds
['a*', 'b*', 'c*', '6*']
done in 1.048 seconds
第二种选择。如果只想并行化函数中的for循环。在这种情况下,您应该将循环重写为函数,并使用Pool.map或Pool.starmap调用它
#Example 2. Function calling a parallel function
#loop
def g(_string):
time.sleep(1)
return _string + '*'
#outer function
def f(a,b,c,_list):
x = a+b+c
_list.append(str(x))
#loop parallelization
with Pool(4) as p:
new_list = p.map(g, _list)
return new_list
start = time.time()
result = f(1,2,3,['a','b','c'])
end = time.time()
print(result)
print(f'done in {round(end-start, 3)} seconds')
输出:
['a', 'b', 'c', 6]
['d', 'e', 'f', 6]
['x', 'y', 'z', 6]
['A', 'B', 'C', 6]
done in 1.084 seconds
['a*', 'b*', 'c*', '6*']
done in 1.048 seconds
注意,loop函数包含处理iterable的单个元素的逻辑。Pool.map将负责为所有元素运行它
time.sleep1调用是为了模拟一些耗时的计算。如果并行化工作正常,您应该能够在1秒而不是4秒内处理4个输入
下面是使用您的代码的示例:
def My_ParallelFunction(iterable_token, dataframe, label_array):
with mp.Pool(4) as p:
token_result = p.starmap(
_loop,
[(token, dataframe, label_array) for token in iterable_token]
)
return token_result
def _loop(token, dataframe, label_array):
A={}
B={}
C={}
D={}
token_count = {}
token_list = []
try:
token_presence=dataframe['Master'].str.contains('\\b'+token+'\\b')
token_presence_sum=sum(token_presence)
if token_presence_sum:
A_token, B_token, C_token, D_token = cross_tab(label_array, token_presence)
A[token]=A_token
B[token]=B_token
C[token]=C_token
D[token]=D_token
token_count[token]=token_presence_sum
token_list.append(token)
return A,B,C,D,token_count,token_list
except Exception as e:
print(e)
如果您希望只对for循环进行多处理,而不是对整个函数进行多处理,那么这些方法应该可以奏效
def cross_tab(label,token_presence):
A_token=0
B_token=0
C_token=0
D_token=0
for i,j in zip(list(label),list(token_presence)):
if i==True and j==True:
A_token+=1
elif i==False and j==False:
D_token+=1
elif i==True and j==False:
C_token+=1
elif i==False and j==True:
B_token+=1
return A_token,B_token,C_token,D_token
def My_ParallelFunction(iterable_token,dataframe,label_array):
A={}
B={}
C={}
D={}
token_count={}
token_list=[]
token_presence_sum=0
i=0
for token in iterable_token:
try:
token_presence=dataframe['Master'].str.contains('\\b'+token+'\\b')
token_presence_sum=sum(token_presence)
if token_presence_sum:
A_token,B_token,C_token,D_token=cross_tab(label_array,token_presence)
A[token]=A_token
B[token]=B_token
C[token]=C_token
D[token]=D_token
token_count[token]=token_presence_sum
token_list.append(token)
except Exception as e:
pass
return (A,B,C,D,token_count,token_list)
import multiprocessing as mp
with mp.Pool(mp.cpu_count()) as p:
results = p.starmap(My_ParallelFunction, (iterable_token, dataframe,label_array))
from multiprocessing import Pool
def My_ParallelFunction(iterable_token,dataframe,label_array):
def get_token_counts(token,dataframe,label_array):
try:
token_presence=dataframe['Master'].str.contains('\\b'+token+'\\b')
token_presence_sum=sum(token_presence)
if token_presence_sum:
A_token,B_token,C_token,D_token=cross_tab(label_array,token_presence)
return token,A_token,B_token,C_token,D_token
except Exception as e:
print(e)
pass
A={}
B={}
C={}
D={}
token_count={}
token_list=[]
token_presence_sum=0
i=0
with Pool() as p:
p_results = p.starmap(get_token_counts, [(token, dataframe, label_array) for token in iterable_token])
for res in p_results:
if res is None:
continue
token,A_token,B_token,C_token,D_token = res
A[token]=A_token
B[token]=B_token
C[token]=C_token
D[token]=D_token
token_count[token]=token_presence_sum
token_list.append(token)
return (A,B,C,D,token_count,token_list)
我从worker函数中删除了将元素添加到列表和词汇表中的部分,因为您必须查看队列或共享对象,才能将多个元素添加到列表或词汇表中。这需要更多的工作,但应该会使代码运行得稍微快一点。这一切都取决于您的iterable中有多少元素以及需要花费多少时间是时候计算了
这段代码背后的思想是创建一个worker函数get_token_counts,该函数将在每个线程中运行,只要它有一个token、一个dataframe和一个label_数组。函数的返回部分包含将元素添加到词典中所需的所有元素,因为您无法真正知道哪个线程首先完成,您可以返回令牌,它解决了所有索引问题。虽然,也许星图保持了参数的顺序,所以可能没有必要
计算完所有元素后,继续将它们添加到列表和目录中
这基本上是多处理一些dataframe函数和cross_选项卡,而不是My_parallel函数
由于您没有给出示例,因此我无法真正测试代码并提出更好的方法。如果您希望只对for循环进行多处理,而不是对整个函数进行多处理,那么这些方法应该是可行的
def cross_tab(label,token_presence):
A_token=0
B_token=0
C_token=0
D_token=0
for i,j in zip(list(label),list(token_presence)):
if i==True and j==True:
A_token+=1
elif i==False and j==False:
D_token+=1
elif i==True and j==False:
C_token+=1
elif i==False and j==True:
B_token+=1
return A_token,B_token,C_token,D_token
def My_ParallelFunction(iterable_token,dataframe,label_array):
A={}
B={}
C={}
D={}
token_count={}
token_list=[]
token_presence_sum=0
i=0
for token in iterable_token:
try:
token_presence=dataframe['Master'].str.contains('\\b'+token+'\\b')
token_presence_sum=sum(token_presence)
if token_presence_sum:
A_token,B_token,C_token,D_token=cross_tab(label_array,token_presence)
A[token]=A_token
B[token]=B_token
C[token]=C_token
D[token]=D_token
token_count[token]=token_presence_sum
token_list.append(token)
except Exception as e:
pass
return (A,B,C,D,token_count,token_list)
import multiprocessing as mp
with mp.Pool(mp.cpu_count()) as p:
results = p.starmap(My_ParallelFunction, (iterable_token, dataframe,label_array))
from multiprocessing import Pool
def My_ParallelFunction(iterable_token,dataframe,label_array):
def get_token_counts(token,dataframe,label_array):
try:
token_presence=dataframe['Master'].str.contains('\\b'+token+'\\b')
token_presence_sum=sum(token_presence)
if token_presence_sum:
A_token,B_token,C_token,D_token=cross_tab(label_array,token_presence)
return token,A_token,B_token,C_token,D_token
except Exception as e:
print(e)
pass
A={}
B={}
C={}
D={}
token_count={}
token_list=[]
token_presence_sum=0
i=0
with Pool() as p:
p_results = p.starmap(get_token_counts, [(token, dataframe, label_array) for token in iterable_token])
for res in p_results:
if res is None:
continue
token,A_token,B_token,C_token,D_token = res
A[token]=A_token
B[token]=B_token
C[token]=C_token
D[token]=D_token
token_count[token]=token_presence_sum
token_list.append(token)
return (A,B,C,D,token_count,token_list)
我从worker函数中删除了将元素添加到列表和词汇表中的部分,因为您必须查看队列或共享对象,才能将多个元素添加到列表或词汇表中。这需要更多的工作,但应该会使代码运行得稍微快一点。这一切都取决于您的iterable中有多少元素以及需要花费多少时间是时候计算了
这段代码背后的思想是创建一个worker函数get_token_counts,该函数将在每个线程中运行,只要它有一个token、一个dataframe和一个label_数组。函数的返回部分包含将元素添加到词典中所需的所有元素,因为您无法真正知道哪个线程首先完成,您可以返回令牌,它解决了所有索引问题。虽然,也许星图保持了参数的顺序,所以可能没有必要
计算完所有元素后,继续将它们添加到列表和目录中
这基本上是多处理一些dataframe函数和cross_选项卡,而不是My_parallel函数
由于您没有给出任何示例,因此我无法真正测试代码并提出更好的解决方案。您是要并行化整个函数还是只并行化for令牌。。。loop?@alec_djinn,我想当爸爸
仅重新组合令牌的for循环。。。但最终这将是这个函数的一部分,然后您应该在for循环中创建一个函数,并在My_parallel函数中调用Pool.map。我将举一个例子。@alec_djinn好的,确定要并行化整个函数还是只并行化for令牌。。。循环?@alec_djinn,我只想对令牌的for循环进行并行化。。。但最终这将是这个函数的一部分,然后您应该在for循环中创建一个函数,并在My_parallel函数中调用Pool.map。我会举个例子。@alec_djinn好的,当然不是所有的项目都是可测试的。只有第一项需要迭代。我在第一个场景中遵循了您的代码,mp.Poolmp.cpu_count为p:results=p.starmapMy_ParallelFunction、iterable_标记、dataframe、label_数组,但错误消息是TypeError:My_ParallelFunction接受3个位置参数,但给出了949。在编辑的details中添加了我的回复当然,在这种情况下,您必须传递iterable的单个元素。在您的情况下,最好的选择是重写循环。如果您共享您的数据帧,我可以做一个适当的示例。@StatguyUser我已经更新了我的答案,使用您的代码包含了一个示例。通过增加池中的进程数,可以增加要使用的进程数。根据经验,您使用的进程数不应超过您拥有的CPU核心数。循环函数中存在逻辑缺陷,dataframe和label_数组不是输入参数,而是在函数内的token行中调用的。str.contains'\\b'+token+'\\b'。请再次阅读问题标题,了解我到底在寻找什么。@StatguyUser以我的代码为例。您必须在离散块中重写函数。您还可以使用其他变量,如A、B、C、D和token_counts,这些变量需要在_循环函数中传递。但最好是重写这一部分,并不是所有的项目都是可修改的。只有第一项需要迭代。我在第一个场景中遵循了您的代码,mp.Poolmp.cpu_count为p:results=p.starmapMy_ParallelFunction、iterable_标记、dataframe、label_数组,但错误消息是TypeError:My_ParallelFunction接受3个位置参数,但给出了949。在编辑的details中添加了我的回复当然,在这种情况下,您必须传递iterable的单个元素。在您的情况下,最好的选择是重写循环。如果您共享您的数据帧,我可以做一个适当的示例。@StatguyUser我已经更新了我的答案,使用您的代码包含了一个示例。通过增加池中的进程数,可以增加要使用的进程数。根据经验,您使用的进程数不应超过您拥有的CPU核心数。循环函数中存在逻辑缺陷,dataframe和label_数组不是输入参数,而是在函数内的token行中调用的。str.contains'\\b'+token+'\\b'。请再次阅读问题标题,了解我到底在寻找什么。@StatguyUser以我的代码为例。您必须在离散块中重写函数。您还可以使用其他变量,如A、B、C、D和token_counts,这些变量需要在_循环函数中传递。但是重写这一部分会更好。我添加了数据和代码以获得输入参数。检查Edit2I下的详细信息,添加数据和代码以获取输入参数。检查Edit2下的详细信息