python多用例输入_Python多处理复杂用例,包括传递参数

并行分配函数时遇到问题。在

问题陈述:我有两个坐标对列表,dfC和{}。对于dfC中的每个obs,我计算有多少dfO在r半径内。我现在有一个工作函数,但我想看看是否可以并行处理。在

关键在于:dfC可以被拆分并单独处理。。。但是dfO需要对每个工人100%进行检查。我的方法是,让我先让它并行工作,然后我将考虑如何将dfO的完整副本分发给工人。除非有人能帮我解决这两个问题?在

首先,下面是设置所有内容的代码:import pandas as pd

import numpy as np

import multiprocessing as mp

from multiprocessing import Pool, process

import traceback

from scipy.spatial import cKDTree

# create 2 dataframes with random "coordinates"

dfC=pd.DataFrame(np.random.np.random.randint(0,100,size=(50,2)), columns=list('xy'))

dfO=pd.DataFrame(np.random.np.random.randint(0,100,size=(500,2)), columns=list('jk'))

下面是一个dfC的示例,dfO看起来很相似

^{pr2}$

接下来,这是一个像charm一样工作的函数。我并没有单独传递所有的参数,而是故意这样做的——为主函数并行调用这些参数做准备(我找不到一种多处理方法来进行其他处理)。在# this function works on dfC, and adds a row which counts the number

# of objects in dfO which are within radius r

def worker_job(args):

try:

dfC, dfO, newcol, r = args

mxC=dfC.as_matrix()

mxO = dfO.as_matrix()

# magic tree stuff

C_Tree = cKDTree(mxC)

O_Tree = cKDTree(mxO)

listoflists = C_Tree.query_ball_tree(O_Tree, r, p=2.0, eps=0.0)

counts=[]

for i in listoflists:

counts.append(len(i))

s = pd.Series(counts)

dfC[newcol] = s.values

except:

raise

traceback.print_exc()

else:

return dfC

如果我提出这样的论点:

args=[dfC,dfO,"new_column_name",3]

当我自己运行它时,它运行得非常好:

worker_job(args)+----+----+-----------------+

| x | y | new_column_name |

+----+----+-----------------+

| 35 | 5 | 4 |

+----+----+-----------------+

| 96 | 18 | 1 |

+----+----+-----------------+

| 23 | 25 | 0 |

+----+----+-----------------+

| 20 | 7 | 1 |

+----+----+-----------------+

| 74 | 54 | 2 |

+----+----+-----------------+

现在,我尝试构建一个函数来控制并行工作者并并行运行这个东西。我尽最大努力:# this function should control the multiprocessing

def Run_Parallel(Function, Num_Proc, args):

try:

pool = Pool(Num_Proc)

parts = pool.map(Function,args)

pool.close()

pool.join()

results_df = pd.concat(parts)

except:

pool.close()

pool.terminate()

traceback.print_exc()

else:

return results_df

这行不通。Run_Parallel(worker_job,2,args)引发关于ValueError: not enough values to unpack (expected 4, got 2)的错误。当这个参数列表经过包装器时,它一定发生了什么。在

我正在寻找关于这个错误的指导,以及任何知道如何解决更大问题的人的加分-为了提高效率,我需要我的池包含100%的{}和{}的子集。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值