我在这里很困惑。我有一个受 CPU 限制的应用程序,因此我开始使用多进程实现并行化来克服 GIL 问题。
我第一次尝试使用multiprocessing,futures但遇到了酸洗问题,所以我去pathos使用哪个dill作为pickle替代品。
一切正常,但我想知道我是否使用的是最“面向未来”的解决方案。我也见过dask,但我不知道它是否会在酸洗类问题的情况下起作用(请参阅Python:(Pathos)多处理与类方法)。从文档来看,它使用了futures所以我假设它不会完成这项工作。
其次,我希望能够一次使用两台服务器,并且我已经看到这可以通过pathos(also dask) 实现,但我不明白它到底是如何工作的。这个答案/sf/answers/1886378091/仅显示如何使用一台服务器。使用 2 个或更多怎么样?我找不到任何关于此的示例,尽管包信息中描述的似乎是可能的。
感谢您的帮助!
我有一个结构:
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。我想把它全部放在内存中。
请引导我完成这个过程。
我有 ~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) 我正在尝试使用 --parallel 选项提高 Linux 上的 perforce 同步性能,但对于我指定的每个线程,错误都会重复一次:
强制密码 (P4PASSWD) 无效或未设置。
如果我设置P4PORT、P4USER和环境变量,然后执行简单的 p4 同步,它就可以正常工作P4PASSWD。P4CLIENT如果我使用以下命令,我会收到 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并将其替换为同步命令中的密码,我会得到相同的结果。
我创建了库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) 我目前正在使用一个工作人员运行 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论证可以解决我的问题吗?另外,“它将并行处理任务,但不会并行消费消息”是什么意思?
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 …
我有一个这样的项目设置:
: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)
我可以做些什么来并行构建所有模块,因为最终会有更多模块,并且顺序执行将不必要地进一步延长所需的构建时间。
我有这个函数(见下文),它接受一个点坐标元组,如果该点位于形状多边形(全局变量)内,则返回一个布尔值。我想将其向量化以获取元组数组并返回等效的 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) 我对机器学习领域比较陌生,如果我的一些问题确实很基本,请原谅。
目前情况:总体目标是尝试改进在超级计算机集群上运行的 r 中的 h2o 包的一些代码。然而,由于数据量太大,单个节点用 h2o 确实需要一天多的时间,因此,我们决定使用多个节点来运行模型。我想出了一个主意:
(1) 分布每个节点构建(nTree/num_node)棵树并保存到模型中;
(2)在集群的每个节点上运行(nTree/num_node)个森林中的树;
(3)将树木重新合并并改造原始森林,并取测量结果的平均值。
后来我意识到这可能有风险。但我找不到实际的支持或反对声明,因为我不是专注于机器学习的程序员。
问题:
我可以在这里展示的实际涉及数字的例子是:
我有一个包含 80k 行和 2k 列的随机森林任务,并且希望树的数量为 64 棵。我所做的是将 16 棵树放在每个节点上,与整个数据集一起运行,并且四个节点中的每一个都提出一个 RF 模型。我现在正在尝试将每个模型中的树合并到这个大型 RF 模型中,并对测量值进行平均(来自这四个模型中的每一个)。