我的代码如下:
import pandas as pd
import multiprocessing as mp
a = {'a' : [1,2,3,1,2,3], 'b' : [5,6,7,4,6,5], 'c' : ['dog', 'cat', 'tree','slow','fast','hurry']}
df = pd.DataFrame(a)
def performDBSCAN(feature):
value=scorecalculate(feature)
print(value)
for ele in range(4):
value=value+1
print('here value is ', value)
return value
def processing(feature):
result1=performDBSCAN(feature)
return result1
def scorecalculate(feature):
scorecal=0
for val in ['a','b','c','d']:
print('alpha is:', val )
scorecal=scorecal+1
return scorecal
columns = df.columns
for ele in df.columns:
processing(ele)
上面的代码以串行方式执行。我想通过使用python以并行方式处理每个col来加快速度,我使用多处理编写了以下代码,但没有帮助。
import pandas as pd
import multiprocessing as mp
def performDBSCAN(feature):
value=scorecalculate(feature)
print(value)
for ele in range(4):
value=value+1
print('here value is ', value)
return value
def scorecalculate(feature):
scorecal=0
for val in ['a','b','c','d']:
print('alpha is:', val )
scorecal=scorecal+1
return scorecal
def processing(feature):
result1=performDBSCAN(feature)
return result1
a = {'a' : [1,2,3,1,2,3], 'b' : [5,6,7,4,6,5],
'c' : ['dog','cat','tree','slow','fast','hurry']}
df = pd.DataFrame(a)
columns = df.columns
pool = mp.Pool(4)
resultpool = pool.map(processing, columns)
我看不到任何输出,内核连续运行没有任何输出?可能是什么问题? numba中的其他图书馆是否有其他方法可以做到这一点? (注意:这段代码是一个正常的例子。基本的想法是我必须在数据帧中获取每一列并执行DBSCAN算法。根据DBSCAN的结果,我有另一个函数来计算得分。我给了这两个上面代码中的函数。上述函数中的递增操作用于验证它是否转向函数。这是我的意图。在代码的第一部分中,它是以串行方式进行的,而我需要并行化for循环的这个区域,以便我可以并行处理多个列)。
您必须使用if __name__ == '__main__':
,如多处理模块https://docs.python.org/3/library/multiprocessing.html#multiprocessing-programming的编程指南中所述。这是您提供的第二个代码应如下所示:
# imports
# functions
if __name__ == '__main__':
a = {
'a': [1, 2, 3, 1, 2, 3],
'b': [5, 6, 7, 4, 6, 5],
'c': ['dog', 'cat', 'tree', 'slow', 'fast', 'hurry']}
df = pd.DataFrame(a)
pool = mp.Pool(4)
result = pool.map(processing, df.columns)
print(result)
输出:
[8, 8, 8]
编辑:
要在Jupyter Notebook中运行代码,您必须将函数放入一个模块中(最简单的情况是它是.py
脚本所在文件夹中的.ipynb
文件)。然后你应该导入你的自定义模块。这解决了我的问题。