相关疑难解决方法(0)

并发编程和并行编程有什么区别?

并发编程和并行编程有什么区别?我问谷歌,但没有找到任何帮助我理解这种差异的东西.你能给我一个例子吗?

现在我发现了这个解释:http://www.linux-mag.com/id/7411 - 但"并发性是程序的属性"vs"并行执行是机器的属性"对我来说还不够 - 我还不能说什么是什么.

language-agnostic parallel-processing concurrency

332
推荐指数
12
解决办法
10万
查看次数

[]和{} vs list()和dict(),哪个更好?

我明白它们本质上都是一样的,但在风格方面,哪个更好(更多Pythonic)用于创建空列表或字典?

python performance dictionary list

97
推荐指数
5
解决办法
10万
查看次数

多处理:使用tqdm显示进度条

为了使我的代码更"pythonic"和更快,我使用"多处理"和一个map函数发送它a)函数和b)迭代范围.

植入的解决方案(即直接在范围tqdm.tqdm(范围(0,30))上调用tqdm不适用于多处理(如下面的代码所示).

进度条显示从0到100%(当python读取代码?)但它不指示map函数的实际进度.

如何显示一个进度条,指示"地图"功能在哪一步?

from multiprocessing import Pool
import tqdm
import time

def _foo(my_number):
   square = my_number * my_number
   time.sleep(1)
   return square 

if __name__ == '__main__':
   p = Pool(2)
   r = p.map(_foo, tqdm.tqdm(range(0, 30)))
   p.close()
   p.join()
Run Code Online (Sandbox Code Playgroud)

欢迎任何帮助或建议......

python multiprocessing progress-bar tqdm

67
推荐指数
7
解决办法
4万
查看次数

python中的并行编程

我的项目是使用OpenMP在C中做一些并行的算法.现在我想用Python做同样的项目.有没有类似于openmp for python的东西?

python parallel-processing

15
推荐指数
0
解决办法
1万
查看次数

在Python 3.2中并行执行for循环

可能重复:
如何并行化一个简单的python循环?

我是Python的新手(使用Python 3.2),我有一个关于并行化的问题.我有一个for循环,我希望在Python 3.2中使用"多处理"并行执行:

def computation:    
    global output

    for x in range(i,j):
        localResult = ... #perform some computation as a function of i and j
        output.append(localResult)
Run Code Online (Sandbox Code Playgroud)

总的来说,我想在i = 0到j = 100的范围内执行此计算.因此,我想创建一些进程,每个进程使用总范围的子域调用函数"calculate".有关于如何做到这一点的任何想法?有没有比使用多处理更好的方法?

更具体地说,我想执行域分解,我有以下代码:

from multiprocessing import Pool

class testModule:

    def __init__(self):
        self

    def computation(self, args):
        start, end = args
        print('start: ', start, ' end: ', end)

testMod = testModule()
length = 100
np=4
p = Pool(processes=np)
p.map(yes tMod.computation, [(length, startPosition, length//np) for startPosition in    range(0, length, length//np)]) 
Run Code Online (Sandbox Code Playgroud)

我收到一条提到PicklingError的错误消息.任何想法可能是这里的问题?

python parallel-processing pickle multiprocessing python-3.x

14
推荐指数
2
解决办法
2万
查看次数

Python多处理池挂在地图调用上

我有一个解析文件的功能,然后使用SQLAlchemy将数据插入MySQL。我一直在按的结果顺序运行该函数,os.listdir()并且一切正常。

因为大部分时间都花在读取文件和写入数据库上,所以我想使用多处理来加快处理速度。这是我的pseduocode,因为实际代码太长:

def parse_file(filename):
    f = open(filename, 'rb')
    data = f.read()
    f.close()

    soup = BeautifulSoup(data,features="lxml", from_encoding='utf-8')

    # parse file here

    db_record = MyDBRecord(parsed_data)

    session.add(db_record)
    session.commit()

pool = mp.Pool(processes=8)

pool.map(parse_file, ['my_dir/' + filename for filename in os.listdir("my_dir")])
Run Code Online (Sandbox Code Playgroud)

我看到的问题是脚本挂起并且永远无法完成。我通常将63条记录中的48条放入数据库。有时更多,有时更少。

我已经尝试过pool.close()并结合使用pool.join(),但似乎都没有帮助。

如何完成此脚本?我究竟做错了什么?我在Linux机器上使用Python 2.7.8。

python mysql multiprocessing

10
推荐指数
2
解决办法
7173
查看次数

如何使进程能够在主程序的数组中写入?

我正在创建一个进程池,每个进程池都需要在主程序中存在的矩阵的不同部分进行编写.不存在覆盖信息的担心,因为每个过程将与矩阵的不同行一起工作.如何使矩阵在流程中可写?

该程序是教授指定我的矩阵乘数,必须进行多处理.它将为计算机的每个核心创建一个进程.主程序将矩阵的不同部分发送给进程,然后他们将计算它们,然后它们将以一种方式返回它们,我可以识别哪个响应对应于它所基于的行.

python matrix multiprocessing

7
推荐指数
3
解决办法
2万
查看次数

在 Python 中并行从磁盘读取文件

我正在从 MATLAB 迁移到 Python,主要是因为 Python 中有大量有趣的机器学习包可用。但让我感到困惑的问题之一是并行处理。特别是,我想从磁盘中for循环读取数千个文本文件,并且我想并行执行。在 MATLAB 中,使用parfor而不是for可以解决问题,但到目前为止我还没有弄清楚如何在 python 中做到这一点。这是我想要做的一个例子。我想读取 N 个文本文件,将它们组成一个 N1xN2 数组,并将每个文件保存到一个 NxN1xN2 numpy 数组中。这个数组将是我从函数返回的内容。假设文件名是file0001.datfile0002.dat等,我喜欢并行化的代码如下:

import numpy as np
N=10000
N1=200
N2=100
result = np.empty([N, N1, N2])
for counter in range(N):
    t_str="%.4d" % counter        
    filename = 'file_'+t_str+'.dat'
    temp_array = np.loadtxt(filename)
    temp_array.shape=[N1,N2]
    result[counter,:,:]=temp_array
Run Code Online (Sandbox Code Playgroud)

我在集群上运行代码,所以我可以使用许多处理器来完成这项工作。因此,任何关于哪种并行化方法更适合我的任务(如果有多个)的评论都是最受欢迎的。

注意:我知道这篇文章,但在那篇文章中,只有out1, out2,out3变量需要担心,并且它们已被明确用作要并行化的函数的参数。但是在这里,我有许多 2D 数组应该从文件中读取并保存到 3D 数组中。所以,这个问题的答案对我的情况来说不够通用(或者我是这样理解的)。

python parallel-processing for-loop

7
推荐指数
2
解决办法
5498
查看次数

python parallel 没有空间不能泡菜

我在 python 中使用 joblib 中的 Parallel 来训练 CNN。代码结构如下:

crf = CRF()
with Parallel(n_jobs=num_cores) as pal_worker:
    for epoch in range(n):
        temp = pal_worker(delayed(crf.runCRF)(x[i],y[i]) for i in range(m))
Run Code Online (Sandbox Code Playgroud)

代码可以成功运行 1 或 2 个 epoch,然后发生错误说(我列出了我认为重要的要点):

......
File "/data_shared/Docker/tsun/software/anaconda3/envs/pytorch04/lib/python3.5/site-packages/joblib/numpy_pickle.py", line 104, in write_array
pickler.file_handle.write(chunk.tostring('C'))
OSError: [Errno 28] No space left on device
"""
The above exception was the direct cause of the following exception:

return future.result(timeout=timeout)
File
......
_pickle.PicklingError: Could not pickle the task to send it to the workers.
Run Code Online (Sandbox Code Playgroud)

我很困惑,因为磁盘有很多空间,程序可以成功运行 1 或 2 …

python parallel-processing pickle joblib

6
推荐指数
0
解决办法
1048
查看次数

如何在 Python 中将 for 循环转换为并行处理?

我还处于 Python 学习的早期阶段。如果这个问题听起来很愚蠢,请提前道歉。

我有这组数据(表格格式),我想向其中添加几个计算列。基本上我有一些位置 lon/lat 和目的地 lon/lat,以及各自的数据时间,我正在计算每对之间的平均速度。

示例数据如下所示:

print(data_all.head(3))

   id    lon_evnt   lat_evnt          event_time  \
0   1 -179.942833  41.012467 2017-12-13 21:17:54   
1   2 -177.552817  41.416400 2017-12-14 03:16:00   
2   3 -175.096567  41.403650 2017-12-14 09:14:06   

  dest_data_generate_time   lat_dest    lon_dest  \
0 2017-12-13 22:33:37.980  37.798599 -121.292193   
1 2017-12-14 04:33:44.393  37.798599 -121.292193   
2 2017-12-14 10:33:51.629  37.798599 -121.292193  

                             address_fields_dest  \
0  {'address': 'Nestle Way', 'city': 'Lathrop...      
1  {'address': 'Nestle Way', 'city': 'Lathrop...      
2  {'address': 'Nestle Way', 'city': 'Lathrop...      
Run Code Online (Sandbox Code Playgroud)

然后我将 lon/lat 压缩在一起:

data_all['ping_location'] = list(zip(data_all.lon_evnt, data_all.lat_evnt))
data_all['destination'] = …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing pandas

5
推荐指数
1
解决办法
9904
查看次数