标签: parallel-processing

Pathos、Dask、futures,并行集群应用使用哪一个?

我在这里很困惑。我有一个受 CPU 限制的应用程序,因此我开始使用多进程实现并行化来克服 GIL 问题。

我第一次尝试使用multiprocessingfutures但遇到了酸洗问题,所以我去pathos使用哪个dill作为pickle替代品。

一切正常,但我想知道我是否使用的是最“面向未来”的解决方案。我也见过dask,但我不知道它是否会在酸洗类问题的情况下起作用(请参阅Python:(Pathos)多处理与类方法)。从文档来看,它使用了futures所以我假设它不会完成这项工作。

其次,我希望能够一次使用两台服务器,并且我已经看到这可以通过pathos(also dask) 实现,但我不明白它到底是如何工作的。这个答案/sf/answers/1886378091/仅显示如何使用一台服务器。使用 2 个或更多怎么样?我找不到任何关于此的示例,尽管包信息中描述的似乎是可能的。

感谢您的帮助!

python parallel-processing multiprocessing pathos dask

5
推荐指数
0
解决办法
908
查看次数

在java中搜索列表中对象的最快方法

我有一个结构:

public class DataItem {
    public int wordID, categoryID, documentID, count;
}
Run Code Online (Sandbox Code Playgroud)

我有一个如下所示的列表:

final public ArrayList<DataItem> data = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

我写了一个在其中搜索的方法:

public DataItem FindDataItem(final int wordID, final int categoryID, final int documentID)
{
    for(DataItem dataItem : data)
        if(dataItem.wordID == wordID && dataItem.documentID == documentID && dataItem.categoryID == categoryID)
            return dataItem;
    return null;
}
Run Code Online (Sandbox Code Playgroud)

但它太慢了。我怎样才能加快速度?

我正在考虑四个HashMap彼此内部,但我想像数据库表一样使用这些数据,因此很难在HashMap中按计数进行分组

我也在考虑ParalellStream,但我不知道如何使用它。看起来很复杂。但仍然是 O(n)。

我也在考虑使用数据库。但我不想有IO。我想把它全部放在内存中。

请引导我完成这个过程。

java parallel-processing search hashmap

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

如何使用 Image Magic 并行批量转换多个子目录中的 1000 张图像

我有 ~100 个子目录,每个子目录有 ~1000 个文件,我想转换JPG为在ie下PNG使用。我的脚本很慢,我可以加快速度吗?Image MagickBASH for Win10LINUX script

find . -type f -name '*.jpg' -exec sh -c '
    orgfile="$0"
    newfile="$(echo "$0" | sed 's/.jpg/.png/')"
    echo $orgfile $newfile
    convert $orgfile -unsharp 0x5 $newfile
    rm $orgfile
' {} \;
Run Code Online (Sandbox Code Playgroud)

我喜欢循环过程,因为转换是许多过程中的第一个,因此输入和输出名称可以重复使用。然而,它的速度很慢,并且有回声可供反馈(更改为每个目录?)

在相关帖子中给出了以下解决方案

# Runs these conversions serially
ls *.NEF | sed 's#.NEF##' | xargs -I^ convert ^.NEF ^.jpg
# Runs these conversions with 8 different processes
ls *.NEF | sed 's#.NEF##' | xargs …
Run Code Online (Sandbox Code Playgroud)

linux parallel-processing bash imagemagick xargs

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

Linux 上的 p4 同步并行给出“Perforce 密码 (P4PASSWD) 无效或未设置”。错误

我正在尝试使用 --parallel 选项提高 Linux 上的 perforce 同步性能,但对于我指定的每个线程,错误都会重复一次:

强制密码 (P4PASSWD) 无效或未设置。

如果我设置P4PORTP4USER和环境变量,然后执行简单的 p4 同步,它就可以正常工作P4PASSWDP4CLIENT如果我使用以下命令,我会收到 4 次错误消息(每个线程一次):

p4 sync --parallel "threads=4,min=1,minsize=1"
Run Code Online (Sandbox Code Playgroud)

如果我在命令行上将密码指定为全局密码,我会得到相同的结果:

p4 -P passwd sync --parallel "threads=4,min=1,minsize=1"
Run Code Online (Sandbox Code Playgroud)

如果我首先使用票证p4 login -p并将其替换为同步命令中的密码,我会得到相同的结果。

linux parallel-processing perforce synchronization

5
推荐指数
0
解决办法
2827
查看次数

URL.createObjectURL() 很慢

我创建了库uwork,但是启动每个进程都需要一些时间,因此它不适合实时应用程序。通过进行一些性能基准测试,我得到了这个片段来说明问题:

let external = (new Date()).getTime();
let blob = new Blob([`
  let internal = new Date();
  console.log("Creation:", internal - ${external} + 'ms');
`], {"type": "text\/plain"});
let file = URL.createObjectURL(blob);
let ww = new Worker(file);
Run Code Online (Sandbox Code Playgroud)

创建文件和 Web Worker 需要 50-400 毫秒之间的任何时间。有什么办法可以优化这个吗?为什么需要这么长时间?

这对于“长”处理时间来说是完全可以的,因为启动时间可以忽略不计,但对于视频分析等实时应用程序来说就不行了,我想以至少 10fps(100ms/运行)的速度应用它。


编辑

经过一些测试后,这也需要 50-400 毫秒,所以我强烈认为是URL.createObjectURL()(或new Blob())花费了这一时间,而不是 Web Worker 本身的创建:

let external = (new Date()).getTime();
let blob = new Blob([external], {"type": "text\/plain"});
let file = URL.createObjectURL(blob);
fetch(file).then(res => res.text()).then(file => { …
Run Code Online (Sandbox Code Playgroud)

javascript parallel-processing real-time web-worker

5
推荐指数
0
解决办法
2455
查看次数

celery如何实现多个worker并行执行的单个队列

我目前正在使用一个工作人员运行 celery 4.0.2,如下所示:

芹菜.py:

app = Celery('project',
         broker='amqp://jimmy:jimmy123@localhost/jimmy_vhost',
         backend='rpc://',
         include=['project.tasks'])

if __name__ == '__main__':
    app.start()
    app.name
Run Code Online (Sandbox Code Playgroud)

任务.py:

from .celery import app
from celery.schedules import schedule
from time import sleep, strftime

app.conf.beat_schedule = {
    'planner_1': {
        'task': 'project.tasks.call_orders',
        'schedule': 1800,
    },
    'planner_2': {
        'task': 'project.tasks.call_inventory',
        'schedule': 900,
    },
}
Run Code Online (Sandbox Code Playgroud)

我使用以下命令来运行beat:

 celery -A project worker -l info --concurrency=3 --beat -E
Run Code Online (Sandbox Code Playgroud)

现在它只是一个队列,只有一个工作人员在运行。

我的问题是如何使用多个工作人员和单个队列运行 celery,以便使用多处理并行执行任务而不重复?

我在互联网上查找了如何使用多处理运行芹菜。根据这篇文章:

celery worker -l info -P processes -c 16 将导致单个消息使用者将工作委托给 16 个操作系统级池进程。在多核环境中,每个操作系统级进程可以分配给不同的CPU,因此它将并行处理任务,但不会并行消费消息。

使用-p processes论证可以解决我的问题吗?另外,“它将并行处理任务,但不会并行消费消息”是什么意思?

python parallel-processing celery

5
推荐指数
0
解决办法
1291
查看次数

Using Docker, with Selenium and Pytest to run parallel tests

I'm trying to use these all things together to run parallel tests in a headless chrome:

Docker, Selenium, Pytest

However, I'm wondering where it makes sense to run the parallel part of the system?

Docker can do this (using selenium grid). Both these can be used to run parallel (and distributed) selenium tests. e.g.

https://github.com/elgalu/docker-selenium

https://github.com/zalando/zalenium

Also Pytest has its own way of running parallel tests (using pytest-xdist) e.g.

http://pytest.org/dev/xdist.html

Would it be easier to run 10 parallel pytest-xdist than …

parallel-processing selenium docker selenium-grid2 xdist

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

并行构建gradle多模块项目

我有一个这样的项目设置:

:root
  :common
  :module1
  :module2
  :module3
  :module4
  :app
Run Code Online (Sandbox Code Playgroud)

模块之间的依赖关系如下:

:common --> "none"
:module* --> :common
:app --> "all other modules"
Run Code Online (Sandbox Code Playgroud)

根构建 gradle 仅为某些插件(如 kotlin gradle 插件)定义构建脚本。插件的实际应用发生在模块 build.gradle 文件中。此外,由于所有模块仅对自身负责,因此不会发生配置注入。

我在 gradle.properties 中启用了 org.gradle.parallel 并运行./gradlew build

预期的执行顺序如下(省略不相关的任务):

:common:build
  :module1:build
  :module2:build
  :module3:build
  :module4:build
    :app:build
Run Code Online (Sandbox Code Playgroud)

但不幸的是我得到了:

:common:build
  :module1:build
    :module2:build
      :module3:build
        :module4:build
          :app:build 
Run Code Online (Sandbox Code Playgroud)

我可以做些什么来并行构建所有模块,因为最终会有更多模块,并且顺序执行将不必要地进一步延长所需的构建时间。

parallel-processing gradle build.gradle

5
推荐指数
0
解决办法
1768
查看次数

是否可以向量化这个 python 函数以在 GPU 上运行?

我有这个函数(见下文),它接受一个点坐标元组,如果该点位于形状多边形(全局变量)内,则返回一个布尔值。我想将其向量化以获取元组数组并返回等效的 bool 数组。

它与 numpy.vectorize 配合得很好,但速度很慢(6-7s),特别是因为我在 for 循环中调用它。

我读到在 GPU 上运行函数可能比在单核上运行更快。这是我根据互联网上的示例尝试的,但我使用了TypeError: invalid signature: 'str' instance not allowed函数装饰器。

函数签名有什么问题以及如何修复它?

import shapely.geometry as sp
import numba as nb
import numpy as np

#the matrix of tuples:
obj_location = np.empty((800,800), object)
for idx in np.ndindex(maxY,maxX):
    obj_location[idx] = idx

#the polygon
poly=sp.Polygon([(200,200),(200,600),(600,600),(600,200)])

#function definition
@nb.vectorize(['bool(tuple)'], target='cuda')
def inside(point_coordinates):
    (y,x) = point_coordinates
    return poly.contains(sp.Point(x,y))

#call function
inside(obj_location)
Run Code Online (Sandbox Code Playgroud)

python parallel-processing gpu vectorization numba

5
推荐指数
0
解决办法
2875
查看次数

在 R 中的 H2O 中将两个随机森林模型中的树模型合并为一个随机森林模型

我对机器学习领域比较陌生,如果我的一些问题确实很基本,请原谅。

目前情况:总体目标是尝试改进在超级计算机集群上运行的 r 中的 h2o 包的一些代码。然而,由于数据量太大,单个节点用 h2o 确实需要一天多的时间,因此,我们决定使用多个节点来运行模型。我想出了一个主意:

(1) 分布每个节点构建(nTree/num_node)棵树并保存到模型中;

(2)在集群的每个节点上运行(nTree/num_node)个森林中的树;

(3)将树木重新合并并改造原始森林,并取测量结果的平均值。

后来我意识到这可能有风险。但我找不到实际的支持或反对声明,因为我不是专注于机器学习的程序员。

问题:

  1. 如果这种处理随机森林的方法会导致一些风险,请参考我的链接,以便我可以基本了解为什么这是不正确的。
  2. 如果这种方式实际上是一种“好的”方式。我应该做什么来合并树,有我可以借用的包或方法吗?
  3. 如果这确实是一个解决问题,请参考我的链接,我可能搜索了错误的关键字,谢谢!

我可以在这里展示的实际涉及数字的例子是:

我有一个包含 80k 行和 2k 列的随机森林任务,并且希望树的数量为 64 棵。我所做的是将 16 棵树放在每个节点上,与整个数据集一起运行,并且四个节点中的每一个都提出一个 RF 模型。我现在正在尝试将每个模型中的树合并到这个大型 RF 模型中,并对测量值进行平均(来自这四个模型中的每一个)。

parallel-processing r machine-learning h2o

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