标签: parallel-processing

当我使用并行代码时,为什么我的计算机没有显示加速?

所以我意识到这个问题听起来很愚蠢(是的,我使用的是双核),但是我尝试了两个不同的库(Grand Central Dispatch和OpenMP),并且在使用clock()来计算带有和不带有线条的代码时它平行,速度是一样的.(为了记录,他们都使用自己的平行形式).他们报告说在不同的线程上运行,但也许它们运行在同一个核心上?有没有办法检查?(这两个库都用于C,我在较低层时感到不舒服.)这非常奇怪.有任何想法吗?

c parallel-processing performance openmp grand-central-dispatch

6
推荐指数
2
解决办法
5228
查看次数

在.NET 4 TPL中杀死一个死锁的任务

我想开始使用任务并行库,因为这是执行异步操作的推荐框架.我无法找到的一件事是强制中止的任何方法,例如Thread.Abort提供的内容.

我特别关注的是我安排运行代码的任务,我不希望完全信任.特别是,我不能确定这个不受信任的代码不会死锁,因此我无法确定使用此代码的任务我是否会完成.我想远离真正的AppDomain隔离(由于编组的开销和复杂性),但我也不想让任务线程挂起,死锁.有没有办法在TPL中做到这一点?

.net parallel-processing deadlock task task-parallel-library

6
推荐指数
1
解决办法
5035
查看次数

Python 的 Fork-Join 模型实现?(相当于Java的ForkJoinPool)

我正在寻找Python 的fork-join 模型的实现。作为 Java 的 ForkJoinPool,它应该允许将一个任务的工作递归地拆分(fork)为多个子任务。子任务完成后,结果将被连接并返回。理想情况下,它应该支持类似于concurrent.futures中的ThreadPoolExecutor和ProcessPoolExecutor的线程和进程,但目前线程更重要。它必须允许限制线程数量(我希望每个核心有一个线程)。我知道这只有在代码释放 GIL 时才有用。

维基百科的示例用于阐明 fork-join 模型:

solve(problem):
    if problem is small enough:
        solve problem directly (sequential algorithm)
    else:
        for part in subdivide(problem)
            fork subtask to solve(part)
        join all subtasks spawned in previous loop
        return combined results
Run Code Online (Sandbox Code Playgroud)

Python中有这样的库吗?我找不到。

python parallel-processing fork-join python-3.x

6
推荐指数
1
解决办法
5523
查看次数

我有一个长时间运行的进程,我在服务总线队列中调用它。我希望它持续超过 5 分钟

我有一个长时间运行的进程,它在数百万条记录之间执行匹配,我使用服务总线调用此代码,但是,当我的进程超过 5 分钟限制时,Azure 会再次从头开始处理已处理的记录。

我怎样才能避免这种情况

这是我的代码:

private static async Task ProcessMessagesAsync(Message message, CancellationToken token)
 {
   long receivedMessageTrasactionId = 0;
   try
   {
     IQueueClient queueClient = new QueueClient(serviceBusConnectionString, serviceBusQueueName, ReceiveMode.PeekLock);

     // Process the message
     receivedMessageTrasactionId = Convert.ToInt64(Encoding.UTF8.GetString(message.Body));

     // My Very Long Running Method
     await DataCleanse.PerformDataCleanse(receivedMessageTrasactionId);
            //Get Transaction and Metric details

     await queueClient.CompleteAsync(message.SystemProperties.LockToken);
   }
   catch (Exception ex)
   {
     Log4NetErrorLogger(ex);
     throw ex;
   }
}
Run Code Online (Sandbox Code Playgroud)

c# parallel-processing azure azureservicebus

6
推荐指数
1
解决办法
2645
查看次数

Jupyter笔记本,如何同时运行多个单元?

我定义了一个运行 bash 脚本的 python 函数。假设该函数是:calc(x,y,z)。如果我在 python 中使用一些变量运行这个函数,

>>> calc(1,2,3)
Run Code Online (Sandbox Code Playgroud)

它生成一个使用变量模拟某些内容的 C 代码(x=1, y=2, z=3),编译 C 代码并执行编译后的输出文件。

我想在 jupyter 笔记本中同时运行多个calc(x,y,z)具有不同 s 的 s 。(x,y,z)您可能已经注意到,问题在于 jupyter Notebook 中的单元格是按顺序执行的。如果我运行三个calc函数,则需要比运行一个函数的时间长三倍的时间。

我尝试了两种方法,但效果不佳。

  1. 使用multiprocessing模块:通过使用模块,可以calc在“一个单元”中同时执行多个操作。但为了以后的分析,我想同时执行多个单元,其中每个单元仅calc使用不同的处理器(或 CPU 内核)。
  2. 使用ipyparallel细胞魔法(受此答案启发):导入后我尝试如下ipyparallel

    # Cell 1
    %%px --targets 0 # use processor 0
    calc(1,1,1)
    
    Run Code Online (Sandbox Code Playgroud)

    # Cell 2
    %%px --targets 1 # use processor 1
    calc(2,2,2)        
    
    Run Code Online (Sandbox Code Playgroud)

    # Cell 3
    %%px …
    Run Code Online (Sandbox Code Playgroud)

python parallel-processing ipython jupyter-notebook

6
推荐指数
1
解决办法
6341
查看次数

微服务中应该使用多线程吗?

如果微服务是可扩展的,例如部署为 AWS 上的 ECS,那么在微服务开发中是否应该使用并行编程?

如果是,那么与 N 个实例消耗相同资源相比,一个实例消耗更多资源有什么好处?

并行编程如何匹配https://12factor.net/

PS 更具体地说 - 我应该在概念上使用并行流而不是简单流吗?

java parallel-processing multithreading scalability 12factor

6
推荐指数
1
解决办法
9530
查看次数

R 并行中止所有 mclapply 操作

如果在任何一个进程中parallel::mclapply()遇到错误(例如, a ) ,是否可以请求尽快放弃所有进一步的处理?stop()

parallel-processing r mclapply

6
推荐指数
1
解决办法
5433
查看次数

从 Jupyter 笔记本中的 Joblib Parallel 函数内打印

在 Jupyter 笔记本中使用 Parallel 时是否可以打印内容或进行调试。

这是我的代码

import pandas as pd
from sklearn.model_selection import ParameterGrid
from joblib import Parallel, delayed

def my_func(a,b):
    print("hi")
    return {"a":a,"b":b},a + b

grid = ParameterGrid({"a": [1, 2],
                      "b": [3, 4]})
resList = Parallel(n_jobs=-1)(delayed(my_func)(**params) for params in grid)
cols = ['params', 'results']
resDf = pd.DataFrame(resList,columns=cols)
Run Code Online (Sandbox Code Playgroud)

数据框包含正确的结果,但函数内的“hi”行不打印

python parallel-processing joblib grid-search jupyter-notebook

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

1 个带有 Gunicorn 的 Web Worker 是否总是意味着只有 1 个进程?

这可能是一个相当基本的问题。我正在学习网络应用程序开发的基础知识以及在这方面的并发性和并行性。

如果我启动 Flask Web 应用程序并将 Gunicorn 设置为 1 个工作线程:

gunicorn -w 1 server:app
Run Code Online (Sandbox Code Playgroud)

这是否总是意味着只有一个进程在运行我的应用程序?或者这不是确定的,有些工作人员可能不仅使用线程、greenlet 等,而且还会为我的应用程序生成一个完整的附加进程?

对于后者,这是否也适用于syncgevent工人,或者这些总是一个过程?

python parallel-processing concurrency web-applications gunicorn

6
推荐指数
1
解决办法
3728
查看次数

如何在 R/future/furrr 中对并行 API 请求进行速率限制

我必须从 Web API (NCBI entrez) 检索大型数据集,该数据集将我每秒的请求数限制为一定数量,例如 10 个(示例代码将在没有 API 密钥的情况下将您限制为 3 个)。我使用 Furrr 的 future_* 函数来并行化请求以尽快获取它们,如下所示:

library(tidyverse)
library(rentrez)
library(furrr)

plan(multiprocess)

api_key <- "<api key>"
# this will return a crap-ton of results
srch <- entrez_search("nuccore", "Homo sapiens", use_history=T, api_key=api_key)

total <- srch$count
per_request <- 500 # get 500 records per parallel request
nrequest <- total %/% per_request + as.logical(total %% per_request)

result <- future_map(seq(nrequest),function(x) {
  rstart <- (x - 1) * per_request
  return(entrez_fetch(
    "nuccore",
    web_history = srch$web_history,
    rettype="fasta",
    retmode="xml",
    retstart=rstart, …
Run Code Online (Sandbox Code Playgroud)

parallel-processing multithreading r rate-limiting furrr

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