我正在移植一些代码到并行。ForEach和得到了一个错误的继续我在代码中。有没有对等的东西,我可以用在平行。ForEach函数等价于继续在ForEach循环?

Parallel.ForEach(items, parallelOptions, item =>
{
    if (!isTrue)
        continue;
});

我正在建设一个Django网站,我正在寻找一个搜索引擎。

一些候选人:

Lucene/Lucene with Compass/Solr 斯芬克斯 Postgresql内置全文搜索 MySQl内置全文搜索

选择标准:

结果相关性和排名 搜索和索引速度 易于使用,易于与Django集成 资源需求——站点将托管在VPS上,所以理想情况下搜索引擎不需要大量的RAM和CPU 可伸缩性 额外的功能,如“你的意思是?”,相关搜索等

任何使用过上述搜索引擎或其他不在列表中的引擎的人——我很想听听你的意见。

编辑:至于索引需求,由于用户不断地向站点输入数据,这些数据将需要不断地进行索引。它不必是实时的,但理想情况下,新数据在索引中显示的延迟不超过15 - 30分钟

假设我有一个4核CPU,我想在最短的时间内运行某个进程。这个过程在理想情况下是可并行的,所以我可以在无数个线程上运行它的块,每个线程花费相同的时间。

因为我有4个内核,所以我不期望通过运行比内核更多的线程来提高速度,因为单个内核在给定时刻只能运行单个线程。我对硬件了解不多,所以这只是一个猜测。

在更多的线程而不是核心上运行并行进程是否有好处?换句话说,如果我使用4000个线程而不是4个线程运行,我的进程会更快、更慢,还是在大约相同的时间内完成?

我有一个Parallel.ForEach()异步循环,我下载了一些网页。我的带宽是有限的,所以我只能下载x页每次并行。ForEach执行所需网页的整个列表。

在运行Parallel.ForEach时,是否有办法限制线程数或任何其他限制器?

演示代码:

Parallel.ForEach(listOfWebpages, webpage => {
  Download(webpage);
});

真正的任务与网页无关,所以创造性的网络爬行解决方案不会有帮助。

并行编程和并行编程的区别是什么?我问了谷歌,但没有找到任何帮助我理解这种区别的东西。你能给我举个例子吗?

现在我找到了这个解释:http://www.linux-mag.com/id/7411 -但是“并发性是程序的属性”vs“并行执行是机器的属性”对我来说还不够-我仍然不能说什么是什么。

我认为它们基本上是同一件事——编写在处理器之间分配任务的程序(在有2个以上处理器的机器上)。然后我读到这个,上面写着

Async methods are intended to be non-blocking operations. An await expression in an async method doesn’t block the current thread while the awaited task is running. Instead, the expression signs up the rest of the method as a continuation and returns control to the caller of the async method. The async and await keywords don't cause additional threads to be created. Async methods don't require multithreading because an async method doesn't run on its own thread. The method runs on the current synchronization context and uses time on the thread only when the method is active. You can use Task.Run to move CPU-bound work to a background thread, but a background thread doesn't help with a process that's just waiting for results to become available.

我想知道是否有人能帮我翻译成英文。它似乎在异步性(有这个词吗?)和线程之间划出了界限,并暗示您可以有一个具有异步任务但没有多线程的程序。

现在我理解了异步任务的概念,比如Jon Skeet的c#深度第三版第467页的例子

async void DisplayWebsiteLength ( object sender, EventArgs e )
{
    label.Text = "Fetching ...";
    using ( HttpClient client = new HttpClient() )
    {
        Task<string> task = client.GetStringAsync("http://csharpindepth.com");
        string text = await task;
        label.Text = text.Length.ToString();
    }
}

async关键字的意思是“无论何时调用该函数,在调用后的所有内容都需要补全的上下文中都不会调用该函数。”

换句话说,就是在某个任务中编写它

int x = 5; 
DisplayWebsiteLength();
double y = Math.Pow((double)x,2000.0);

,因为DisplayWebsiteLength()与x或y无关,将导致DisplayWebsiteLength()被“在后台”执行,如

                processor 1                |      processor 2
-------------------------------------------------------------------
int x = 5;                                 |  DisplayWebsiteLength()
double y = Math.Pow((double)x,2000.0);     |

显然这是一个愚蠢的例子,但我是正确的还是我完全糊涂了?

(另外,我对为什么sender和e没有在上面的函数体中使用感到困惑。)

我正在尝试编写一个.sh文件,同时运行许多程序

我试过了

prog1 
prog2

但是它会运行prog1,然后等待prog1结束,然后启动prog2……

那么如何并行运行呢?

我目前正在寻找其他搜索方法,而不是有一个巨大的SQL查询。 我最近看了elasticsearch,玩了一下whoosh(一种搜索引擎的Python实现)。

你能给出你的选择的理由吗?

我需要一次执行一定数量的任务4,就像这样:

ExecutorService taskExecutor = Executors.newFixedThreadPool(4);
while(...) {
    taskExecutor.execute(new MyTask());
}
//...wait for completion somehow

当所有这些都完成后,我如何得到通知?现在我想不出比设置一些全局任务计数器更好的方法,并在每个任务结束时减少它,然后在无限循环中监视这个计数器变成0;或获取一个期货列表,并在无限循环监视器isDone为所有它们。不涉及无限循环的更好的解决方案是什么?

谢谢。

这可能是一个微不足道的问题,但我如何在python中并行化下面的循环?

# setup output lists
output1 = list()
output2 = list()
output3 = list()

for j in range(0, 10):
    # calc individual parameter value
    parameter = j * offset
    # call the calculation
    out1, out2, out3 = calc_stuff(parameter = parameter)

    # put results into correct output list
    output1.append(out1)
    output2.append(out2)
    output3.append(out3)

我知道如何在Python中启动单个线程,但我不知道如何“收集”结果。

多个进程也可以——在这种情况下,只要是最简单的就行。我目前使用的是Linux,但代码应该在Windows和Mac上运行。

并行化这段代码最简单的方法是什么?