我有一个大功能,需要并行运行才能节省计算时间。该函数获取名称和列表,并返回包含计算结果的数据框。 我需要将每个数据框返回并保存到列表(或其他内容)中。 我可以使用PROCESS进行并行运行,但是它将返回一个累积数据帧。我如何从每个过程中获取数据框而又不累加。 因此:
DF1 = A B
1 2
2 4
DF2 = A B
1 3
5 6
我得到的是:
DF1 = A B
1 2
2 4
DF2 = A B
1 2
2 4
1 3
5 6
我在下面粘贴了示例代码: 预先谢谢您-我似乎无法弄清楚这一点。
if __name__ == "__main__":
SectorA = ["AAPL", "ATVI", "BIDU"]
SectorB = ['AA','IBM','UAL']
sectors = [SectorA,SectorB, Tech_Sector, TransP_Sector]
sectorsNames = ['SectorA', 'SectorB']
######################################################################
procs = []
#proc = Process(target=RUN_Function) # instantiating without any argument
#procs.append(proc)
#proc.start()
# instantiating process with arguments
for name, sec in itt.zip_longest(sectorsNames, sectors):
info("My Main")
proc = Process(target=RUN_Function, args=(name,sec))
procs.append(proc)
procs.start()
#proc.join()
'''
for mpos in procs:
print("Positions for the following: ".format(mpos))
'''
print("Finished")
proc.terminate()
答案 0 :(得分:0)
我无法为您提供多重处理功能,但例如,也许AsyncIO可能会引起您的兴趣
代码
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# python 3.7.2
from asyncio import ensure_future, gather, run
from json import dumps
async def calculate(data):
tasks = list()
result = dict()
temp = None
for df in data:
task = ensure_future(calculate_one(df, data[df]))
tasks.append(task)
temp = await gather(*tasks)
for element in temp:
result[element['df']] = element['ds']
return result
async def calculate_one(df, dataset):
result = dict()
result['df'] = df
result['ds'] = list()
for element in dataset:
result['ds'].append(element + '-processed')
return result
if __name__ == '__main__':
src_data = {'df1': ['a1', 'b1', 'c1', 'd1'],
'df2': ['a2', 'b2', 'c2', 'd2']}
res = run(calculate(src_data))
print(dumps(res, indent=4))
结果
{
"df1": [
"a1-processed",
"b1-processed",
"c1-processed",
"d1-processed"
],
"df2": [
"a2-processed",
"b2-processed",
"c2-processed",
"d2-processed"
]
}
您的示例不是很清楚,因此,如果您需要其他数据帧中的数据进行处理,则可以使用全局变量,也可以将所有scr_data放入calculate_one并使用索引。
希望它将对您有帮助!
答案 1 :(得分:0)
谢谢Dmitrii,
我终于解决了这个问题。
我当时忽略了.append()。
这应该被排除,并在循环之后添加.close()。希望这对其他人有帮助。
for name, sec in zip(sectorsNames, sectors):
#info("My Main")
proc = Process(target=RUN_Function, args=(name,sec))
#procs.append(proc)---#EXCLUDE THIS
proc.start()
#procs.append(proc)
proc.close() #ADD THE CLOSE