我想拥有用户编辑的大文本字段的完整历史记录,使用Django存储.
我见过这些项目:
我有一个特殊的用例,可能超出了这些项目提供的范围.此外,我对这些项目的文档记录,测试和更新情况保持警惕.无论如何,这是我面临的问题:
我有一个模特,喜欢:
from django.db import models
class Document(models.Model):
text_field = models.TextField()
Run Code Online (Sandbox Code Playgroud)
这个文本字段可能很大 - 超过40k - 我希望有一个自动保存功能,每30秒左右保存一次字段.这可能会使数据库变得非常大,显然,如果每次40k都有很多保存(如果压缩可能仍然是10k).我能想到的最佳解决方案是保持最新保存版本和新版本之间的差异.
但是,我担心涉及并行更新的竞争条件.有两种截然不同的竞争条件(第二种情况比第一种情况严重得多):
HTTP事务竞争条件:用户A和用户B请求文档X0,并单独进行更改,生成Xa和Xb.Xa被保存,X0和Xa之间的差异是"Xa-0"("少了一点"),Xa现在被存储为数据库中的正式版本.如果Xb随后保存,则覆盖Xa,差异为Xb-a("b减去a").
虽然不理想,但我并不过分担心这种行为.文档相互重写,用户A和B可能彼此不知道(每个文档都以文档X0开头),但历史保留了完整性.
数据库读取/更新竞争条件:有问题的竞争条件是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原子性:
非常感谢你.
我有一个下载网页的python脚本,解析它并从页面返回一些值.我需要抓一些这样的页面来获得最终结果.每个页面检索需要很长时间(5-10s),我宁愿并行提出请求以减少等待时间.
问题是 - 哪种机制可以快速,正确地执行,并且CPU /内存浪费最少?扭曲,异步,线程,其他什么?你能提供一些例子的链接吗?
谢谢
UPD:这个问题有一些解决方案,我正在寻找速度和资源之间的妥协.如果你能告诉一些经验细节 - 从你的观点来看它是如何快速负载 - 这将是非常有帮助的.
与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 似乎有一个可以并行化解决方案功能的功能,但是,可能需要几周的时间来安装新的软件包特定服务器.
服务器已经安装了雪包.
所以
谢谢.
[编辑] - 其他细节
矩阵约为370,000 x 370,000.我用它来解决alpha中心问题,http://en.wikipedia.org/wiki/Alpha_centrality.我最初在igraph包中使用alpha中心函数,但它会崩溃R.
更多细节
假设我有两个序列返回整数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) 这是使用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)
问题是 :
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) 我正在从模板克隆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)
题
我一直在阅读并试图了解Spark框架如何在独立模式下使用其核心.根据Spark文档,参数" spark.task.cpus "的值默认设置为1,这意味着为每个任务分配的核心数.
问题1: 对于多核机器(例如,总共4个核心,8个硬件线程),当"spark.task.cpus = 4"时,Spark将使用4个核心(每个核心1个线程)或2个核心超级核心线?
如果我将"spark.task.cpus = 16"设置为超过此机器上可用硬件线程的数量,会发生什么?
问题2: 这种硬件并行性是如何实现的?我试图查看代码,但找不到任何与硬件或JVM通信的内核级并行性.例如,如果任务是"过滤器"功能,那么单个过滤器任务如何分配到多个核心或线程?
也许我错过了什么.这与Scala语言有关吗?
该程序使用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) 我的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) 我有一个最近的12核Intel CPU(Haswell架构),它有4个内存通道.机器可以并行执行多少次DRAM内存访问?
例如,如果我有一个使用12个线程的程序,这些线程位于紧密循环中,从一个范围太大而无法容纳缓存的随机存储器地址读取单个字节.我希望所有12个线程将花费几乎所有时间等待内存提取.
线程是否必须轮流使用DRAM总线?
注意:假设我使用的是1 GB的VM页面大小,因此没有TLB缓存未命中.