标签: parallel-processing

如何在Django中完成文本的完整历史记录?

我想拥有用户编辑的大文本字段的完整历史记录,使用Django存储.

我见过这些项目:

我有一个特殊的用例,可能超出了这些项目提供的范围.此外,我对这些项目的文档记录,测试和更新情况保持警惕.无论如何,这是我面临的问题:

我有一个模特,喜欢:

from django.db import models

class Document(models.Model):
   text_field = models.TextField()
Run Code Online (Sandbox Code Playgroud)

这个文本字段可能很大 - 超过40k - 我希望有一个自动保存功能,每30秒左右保存一次字段.这可能会使数据库变得非常大,显然,如果每次40k都有很多保存(如果压缩可能仍然是10k).我能想到的最佳解决方案是保持最新保存版本和新版本之间的差异.

但是,我担心涉及并行更新的竞争条件.有两种截然不同的竞争条件(第二种情况比第一种情况严重得多):

  1. HTTP事务竞争条件:用户A和用户B请求文档X0,并单独进行更改,生成Xa和Xb.Xa被保存,X0和Xa之间的差异是"Xa-0"("少了一点"),Xa现在被存储为数据库中的正式版本.如果Xb随后保存,则覆盖Xa,差异为Xb-a("b减去a").

    虽然不理想,但我并不过分担心这种行为.文档相互重写,用户A和B可能彼此不知道(每个文档都以文档X0开头),但历史保留了完整性.

  2. 数据库读取/更新竞争条件:有问题的竞争条件是Xa和Xb同时保存在X0上.会有(伪)代码类似于:

     def save_history(orig_doc, new_doc):
         text_field_diff = diff(orig_doc.text_field, new_doc.text_field)
         save_diff(text_field_diff)
    
    Run Code Online (Sandbox Code Playgroud)

    如果Xa和Xb都从数据库中读取X0(即orig_doc是X0),它们的差异将变为Xa-0和Xb-0(与序列化的Xa-0相反,然后是Xb-a,或等效的Xb-0然后Xa b).当您尝试将差异拼接在一起以生成历史记录时,它将在修补程序Xa-0或Xb-0(均适用于X0)上失败.历史的完整性已经受到损害(或者有吗?).

    一种可能的解决方案是自动协调算法,该算法可以事后检测这些问题.如果重建历史记录失败,可能会假设已发生竞争条件,因此将失败的修补程序应用于历史记录的先前版本,直到成功为止.

我很高兴能就如何解决这个问题得到一些反馈和建议.

顺便说一句,只要它是一个有用的出路,我注意到这里讨论了Django原子性:

非常感谢你.

django parallel-processing concurrency atomic django-models

9
推荐指数
1
解决办法
2582
查看次数

一次/并行检索多个URL

可能重复:
如何在python中使用urllib2加速获取页面?

我有一个下载网页的python脚本,解析它并从页面返回一些值.我需要抓一些这样的页面来获得最终结果.每个页面检索需要很长时间(5-10s),我宁愿并行提出请求以减少等待时间.
问题是 - 哪种机制可以快速,正确地执行,并且CPU /内存浪费最少?扭曲,异步,线程,其他什么?你能提供一些例子的链接吗?
谢谢

UPD:这个问题有一些解决方案,我正在寻找速度和资源之间的妥协.如果你能告诉一些经验细节 - 从你的观点来看它是如何快速负载 - 这将是非常有帮助的.

python parallel-processing screen-scraping

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

对Ax = b并行化Solve()?

与STATS.se交叉,因为这个问题可以跨越两个STAT.se/SO https://stats.stackexchange.com/questions/17712/parallelize-solve-for-ax-b


我有一些非常大的稀疏矩阵,使用矩阵包中的spMatrix函数创建.

使用solve()函数适用于我的Ax = b问题,但需要很长时间.几天.

我注意到http://cran.r-project.org/web/packages/RScaLAPACK/RScaLAPACK.pdf 似乎有一个可以并行化解决方案功能的功能,但是,可能需要几周的时间来安装新的软件包特定服务器.

服务器已经安装了雪包.

所以

  1. 有没有办法使用雪来并行化此操作?
  2. 如果没有,还有其他方法可以加快这种类型的操作吗?
  3. 还有像RScaLAPACK这样的其他软件包吗?我对RScaLAPACK的搜索似乎表明人们对它有很多问题.

谢谢.

[编辑] - 其他细节

矩阵约为370,000 x 370,000.我用它来解决alpha中心问题,http://en.wikipedia.org/wiki/Alpha_centrality.我最初在igraph包中使用alpha中心函数,但它会崩溃R.

更多细节

  • 这是在一台机器上,有12个核心和96个内存(我相信)
  • 它是沿着引文关系线的有向图.
  • 计算条件数和密度需要一段时间.将发布,因为它可用.
  • 将对stat.SE进行crosspost并将链接添加回此处

parallel-processing r sparse-matrix

9
推荐指数
1
解决办法
753
查看次数

使用Parallel Linq Extensions结合两个序列,如何才能首先产生最快的结果?

假设我有两个序列返回整数1到5.

第一个返回1,2和3非常快,但4和5每个需要200ms.

public static IEnumerable<int> FastFirst()
{
    for (int i = 1; i < 6; i++)
    {
        if (i > 3) Thread.Sleep(200);
        yield return i;
    }
}
Run Code Online (Sandbox Code Playgroud)

第二个返回1,2和3,延迟时间为200ms,但快速返回4和5.

public static IEnumerable<int> SlowFirst()
{
    for (int i = 1; i < 6; i++)
    {
        if (i < 4) Thread.Sleep(200);
        yield return i;
    }
}
Run Code Online (Sandbox Code Playgroud)

联合这两个序列只给出数字1到5.

FastFirst().Union(SlowFirst());
Run Code Online (Sandbox Code Playgroud)

我不能保证两种方法中的哪一种在什么时候有延迟,所以执行的顺序不能保证为我提供解决方案.因此,我想将联盟并行化,以便最小化我的例子中的(人为的)延迟.

一个真实场景:我有一个返回一些实体的缓存,以及一个返回所有实体的数据源.我希望能够从一个方法返回一个迭代器,该方法将请求内部并行化到缓存和数据源,以便缓存的结果尽可能快地生成.

注1:我意识到这仍然在浪费CPU周期; 我不是问我怎么能阻止序列迭代它们的慢元素,我怎么能尽可能快地结合它们.

更新1:我已经定制了achitaka-san对接受多个生成器的响应,并使用ContinueWhenAll将BlockingCollection的CompleteAdding设置为一次.我只是把它放在这里,因为它会因缺少注释格式而丢失.任何进一步的反馈都会很棒!

public static IEnumerable<TResult> SelectAsync<TResult>(
    params IEnumerable<TResult>[] producer)
{
    var resultsQueue = new BlockingCollection<TResult>();

    var taskList …
Run Code Online (Sandbox Code Playgroud)

.net c# parallel-processing parallel-extensions plinq

9
推荐指数
1
解决办法
1012
查看次数

在matlab中使用多个GPU

这是使用Jacket/matlab的ginfo的输出:

Detected CUDA-capable GPUs:
CUDA driver 270.81, CUDA toolkit 4.0
GPU0 Tesla C1060, 4096 MB, Compute 1.3 (single,double) (in use)
GPU1 Tesla C1060, 4096 MB, Compute 1.3 (single,double)
GPU2 Quadro FX 1800, 742 MB, Compute 1.1 (single)
Display Device: GPU2 Quadro FX 1800
Run Code Online (Sandbox Code Playgroud)

问题是 :

  1. 我可以同时使用两个特斯拉(parfor)吗?怎么样?
  2. 如何知道当前正在运行/执行程序的核心数?
  3. 在运行以下代码并制作Quadro(使用中)之后,我发现尽管特斯拉拥有240个内核且Quadro只有64个,但它比特斯拉需要更少的时间?也许是因为它是显示设备?也许是因为它的单精度和特斯拉是双精度?
clc; clear all;close all;
addpath ('C:/Program Files/AccelerEyes/Jacket/engine');
i = im2double(imread('cameraman.tif'));
i_gpu=gdouble(i);
h=fspecial('motion',50,45);% Create predefined 2-D filter
h_gpu=gdouble(h);
tic;
for j=1:500
    x_gpu = imfilter( i_gpu,h_gpu );
  end
i2 = double(x_gpu); %memory transfer 
t=toc …
Run Code Online (Sandbox Code Playgroud)

parallel-processing matlab cuda gpu image-processing

9
推荐指数
1
解决办法
3117
查看次数

Powershell 3.0 - 工作流程 - 限制并行执行次数

我正在从模板克隆ESX服务器上的VM.简化代码如下所示:

Workflow Create-VM {
  $List = 1..500
  foreach -parallel ($Elem in $List)
  {
      # Create VM ...
      # Configure created VM ..
  }
}

Create-VM
Run Code Online (Sandbox Code Playgroud)

并行执行非常有用.不幸的是,在这种情况下不能很好地工作.生成了太多并行请求.我需要将并行执行次数限制为较小的数字(例如4).

我试图更改本地会话配置(SessionThrottleLimit,MaxSessionsPerWorkflow,MaxRunningWorkflows)http://technet.microsoft.com/en-us/library/hh849862.aspx.

$WWE = New-PSWorkflowExecutionOption  -SessionThrottleLimit 4
Set-PSSessionConfiguration -Name microsoft.powershell.workflow `
   -SessionTypeOption $WWE 
Get-PSSessionConfiguration microsoft.powershell.workflow | 
fl SessionThrottleLimit
Run Code Online (Sandbox Code Playgroud)

  • 我应该更改哪个参数(或组合)的会话配置,以便将并行执行的数量限制为4?
  • 是否有其他方法如何实现(例如:执行工作流的不同方式......)?

parallel-processing powershell workflow powershell-3.0

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

Spark如何在多核或超线程机器上的一个任务中实现并行性

我一直在阅读并试图了解Spark框架如何在独立模式下使用其核心.根据Spark文档,参数" spark.task.cpus "的值默认设置为1,这意味着为每个任务分配的核心数.

问题1: 对于多核机器(例如,总共4个核心,8个硬件线程),当"spark.task.cpus = 4"时,Spark将使用4个核心(每个核心1个线程)或2个核心超级核心线?

如果我将"spark.task.cpus = 16"设置为超过此机器上可用硬件线程的数量,会发生什么?

问题2: 这种硬件并行性是如何实现的?我试图查看代码,但找不到任何与硬件或JVM通信的内核级并行性.例如,如果任务是"过滤器"功能,那么单个过滤器任务如何分配到多个核心或线程?

也许我错过了什么.这与Scala语言有关吗?

parallel-processing multithreading multicore apache-spark

9
推荐指数
1
解决办法
9333
查看次数

如何使用所有处理器在MPI中发送/接收

该程序使用C Lagrange和MPI编写.我是MPI的新手,想要使用所有处理器进行一些计算,包括进程0.为了学习这个概念,我编写了以下简单程序.但是这个程序在接收到进程0的输入后挂在底部,并且不会将结果发送回进程0.

#include <mpi.h>
#include <stdio.h>

int main(int argc, char** argv) {    
    MPI_Init(&argc, &argv);
    int world_rank;
    MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
    int world_size;
    MPI_Comm_size(MPI_COMM_WORLD, &world_size);

    int number;
    int result;
    if (world_rank == 0) 
    {
        number = -2;
        int i;
        for(i = 0; i < 4; i++)
        {
            MPI_Send(&number, 1, MPI_INT, i, 0, MPI_COMM_WORLD);
        }
        for(i = 0; i < 4; i++)
        {           /*Error: can't get result send by other processos bellow*/
            MPI_Recv(&number, 1, MPI_INT, i, 99, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
            printf("Process 0 received number %d …
Run Code Online (Sandbox Code Playgroud)

c parallel-processing mpi

9
推荐指数
1
解决办法
2125
查看次数

make:并行运行多个任务并等待完成

我的makefile中的一个目标是一个非常耗时且耗时的任务.但我可以分开工作负载并多次并行运行任务,以加快整个过程.

我的问题是make不等待所有进程完成.

考虑这个简单的脚本,名为myTask.sh:

#!/bin/bash

echo "Sleeping $1 seconds"
sleep $1
echo "$1 are over!"
Run Code Online (Sandbox Code Playgroud)

现在,让我们从bash脚本中调用它,并wait用来等待所有任务完成:

#!/bin/bash

echo "START"
./myTask.sh 5 &
./myTask.sh 15 &
./myTask.sh 10 &

wait  # Wait for all tasks to complete

echo "DONE"
Run Code Online (Sandbox Code Playgroud)

输出如预期:

START
Sleeping 15 seconds
Sleeping 5 seconds
Sleeping 10 seconds
5 are over!
10 are over!
15 are over!
DONE
Run Code Online (Sandbox Code Playgroud)

但是在尝试相同的时候Makefile:

test:
    echo "START"
    ./myTask.sh 5 &
    ./myTask.sh 15 &
    ./myTask.sh 10 &
    wait
    echo "DONE" …
Run Code Online (Sandbox Code Playgroud)

parallel-processing makefile

9
推荐指数
2
解决办法
6108
查看次数

现代处理器上的并行内存访问

我有一个最近的12核Intel CPU(Haswell架构),它有4个内存通道.机器可以并行执行多少次DRAM内存访问?

例如,如果我有一个使用12个线程的程序,这些线程位于紧密循环中,从一个范围太大而无法容纳缓存的随机存储器地址读取单个字节.我希望所有12个线程将花费几乎所有时间等待内存提取.

线程是否必须轮流使用DRAM总线?

注意:假设我使用的是1 GB的VM页面大小,因此没有TLB缓存未命中.

memory parallel-processing x86 multicore bus

9
推荐指数
1
解决办法
1688
查看次数