标签: 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
查看次数

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万
查看次数

平行减少

我已经阅读了Mark Harris的文章"优化并行缩减CUDA",我发现它非常有用,但我仍然无法理解1或2个概念.它写在第18页:

//First add during load

// each thread loads one element from global to shared mem

unsigned int tid = threadIdx.x;

unsigned int i = blockIdx.x*blockDim.x + threadIdx.x;

sdata[tid] = g_idata[i];
__syncthreads();
Run Code Online (Sandbox Code Playgroud)

优化代码:有2个负载和第一个减少的添加:

// perform first level of reduction,

// reading from global memory, writing to shared memory
unsigned int tid = threadIdx.x;                                    ...1

unsigned int i = blockIdx.x*(blockDim.x*2) + threadIdx.x;          ...2

sdata[tid] = g_idata[i] + g_idata[i+blockDim.x];                   ...3

__syncthreads();                                                   ...4
Run Code Online (Sandbox Code Playgroud)

我无法理解第2行; 如果我有256个元素,如果我选择128作为我的块大小,那么为什么我将它乘以2?请解释如何确定块大小?

c c++ parallel-processing cuda gpu

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

golang中的并行处理

给出以下代码:

package main

import (
    "fmt"
    "math/rand"
    "time"
)

func main() {
    for i := 0; i < 3; i++ {
        go f(i)
    }

    // prevent main from exiting immediately
    var input string
    fmt.Scanln(&input)
}

func f(n int) {
    for i := 0; i < 10; i++ {
        dowork(n, i)
        amt := time.Duration(rand.Intn(250))
        time.Sleep(time.Millisecond * amt)
    }
}

func dowork(goroutine, loopindex int) {
    // simulate work
    time.Sleep(time.Second * time.Duration(5))
    fmt.Printf("gr[%d]: i=%d\n", goroutine, loopindex)
}
Run Code Online (Sandbox Code Playgroud)

我可以假设'dowork'函数将并行执行吗?

这是实现并行性的正确方法还是更好地使用渠道并为每个goroutine分离"dowork"工作者?

parallel-processing go goroutine

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

使用LINQ生成素数

以下是面试问题:

以下单行生成并显示前500个素数的列表.如何使用并行LINQ优化它,同时仍保持单个C#语句:

MessageBox.Show(string.Join(",", 
    Enumerable.Range(2, (int)(500 * (Math.Log(500) + Math.Log(System.Math.Log(500)) - 0.5)))
                .Where(x => Enumerable.Range(2, x - 2)
                                      .All(y => x % y != 0))
                .TakeWhile((n, index) => index < 500)));
Run Code Online (Sandbox Code Playgroud)

我尝试引入AsParallel()以及ParallelEnumerable查询,但没有看到多核机器的任何实际好处.查询仍然使用一个CPU核心,而其他核心享受休闲时间.有人可以提出一项改进措施,将负载平均分配到所有内核上,从而缩短执行时间吗?

对于发烧友:以下公式返回一个上限,保证大于N个素数,即如果你检查这个数字,你肯定会发现小于它的N个素数:

UpperBound = N * (Log(N) + Log(Log(N)) - 0.5) //Log is natural log
Run Code Online (Sandbox Code Playgroud)

c# linq parallel-processing optimization primes

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

如何使用所有处理器在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
查看次数