相关疑难解决方法(0)

在 for 循环上使用 python 多重处理将结果附加到字典中

因此,我查看了多处理模块的文档,也查看了此处提出的其他问题,但似乎没有一个与我的情况相似,因此我开始了一个新问题。

为了简单起见,我有一段如下形式的代码:

# simple dataframe of some users and their properties.
data = {'userId': [1, 2, 3, 4],
        'property': [12, 11, 13, 43]}
df = pd.DataFrame.from_dict(data)

# a function that generates permutations of the above users, in the form of a list of lists
# such as [[1,2,3,4], [2,1,3,4], [2,3,4,1], [2,4,1,3]]
user_perm = generate_permutations(nr_perm=4)

# a function that computes some relation between users
def comp_rel(df, permutation, user_dict):
    df1 = df.userId.isin(permutation[0])
    df2 = df.userId.isin(permutation[1])
    user_dict[permutation[0]] += permutation[1]
    return user_dict


# and …
Run Code Online (Sandbox Code Playgroud)

python dictionary multiprocessing python-3.x

4
推荐指数
1
解决办法
2244
查看次数

并行执行和python上的文件写入

我有一个非常大的数据集分布在10个大集群中,任务是为每个集群做一些计算,并逐行将结果写入(追加)到10个文件中,其中每个文件包含对应于10个集群中的每个集群的结果,每个集群可以独立计算,我想将代码并行化为十个CPU(或线程),这样我就可以一次对所有集群进行计算,我的任务的简化伪代码如下:

for(c in range (1,10)):  #this is the loop over the clusters
    for(l in "readlines from cluster C")
         # do some computations for line l in cluster c
         # append the results in file named "cluster_c" one file for each cluter c
Run Code Online (Sandbox Code Playgroud)

python parallel-processing multithreading multiprocessing

3
推荐指数
3
解决办法
8110
查看次数

如何通过多重处理将函数应用于2D numpy数组

假设我具有以下功能:

def f(x,y):
    return x*y
Run Code Online (Sandbox Code Playgroud)

如何使用多重处理模块将功能应用于NxM 2D numpy数组中的每个元素?使用串行迭代,代码可能如下所示:

import numpy as np
N = 10
M = 12
results = np.zeros(shape=(N,M))
for x in range(N):
    for y in range(M):
        results[x,y] = f(x,y)
Run Code Online (Sandbox Code Playgroud)

python arrays numpy multiprocessing

3
推荐指数
1
解决办法
2222
查看次数

如何使用多个参数并行化一个简单的 python def

我想并行化一个 python 脚本。我已经创建了一个定义:

def dummy(list1,list2):
  do usefull calculations ...
Run Code Online (Sandbox Code Playgroud)

list1 和 list2 包含我应该阅读的文件名列表,然后用它们进行计算。文件是独立的。list1 和 2 包含相同数量的参数。

让我们假设我有 2 个 cpus(我想强加要使用的 cpus 数量)。我希望第一个 cpu 使用仅包含 list1 和 list2 的前半部分的列表调用定义,同时第二个 cpu 应该使用 list1 和 list2 的后半部分调用相同的 def dummy。

就像是:

import multiprocessing
nb_cpus = 2
pool = multiprocessing.Pool(processes=nb_cpus)
for ii in nb_cpus:
  list_half1 = list1[0:max/nb_cpus]
  list_half2 = list2[0:max/nb_cpus]
  result[ii] = pool.map(dummy,list_half1,list_half2)
Run Code Online (Sandbox Code Playgroud)

问题是 pool.map 只能在 def 有 1 个参数并且我不能循环 CPU 时才能工作。

感谢您对这个问题的任何帮助!

PS:我不可能将两个参数连接成一个,因为在实际情况下,我要传递更多的参数。

python parallel-processing multiprocessing

2
推荐指数
1
解决办法
4965
查看次数