我正在尝试使用多处理并行化应用程序,该应用程序接收一个非常大的csv文件(64MB到500MB),一些工作逐行,然后输出一个小的,固定大小的文件.
目前我做了一个list(file_obj),不幸的是,它被完全加载到内存中(我认为)然后我将该列表分成n个部分,n是我想要运行的进程数.然后我pool.map()在破碎的清单上做了一个.
与单线程,只是打开文件和迭代的方法相比,这似乎有一个非常非常糟糕的运行时.有人可以建议更好的解决方案?
另外,我需要以组的形式处理文件的行,这些行保留了某个列的值.这些行组本身可以拆分,但任何组都不应包含此列的多个值.
所以我正在尝试创建一个使用Selenium自动化WebDriver在网站上执行任务的java程序.目前,我正在使用它进行工作,以便自动执行烦人的任务,用户必须将文件上传到我们的数据库.我已经成功地制作了一个自动执行此程序的程序,并节省了数小时的手动工作.
现在我想让程序并行运行多个浏览器.我想这样做是为了加快我上传文件的速度,因为大部分时间都在等待页面加载.
我用一个更简单的程序版本对此进行了测试,并通过使用自己的WebDrivers打开了数十到数百个线程,设法将简单任务加速了2-10倍.
问题是,每当我运行超过1个 WebDriver时,整个事情有时会开始随机发生,而在其他时候根本不起作用.我尝试使用'PhantomJSDriver'和最新的'PhantomJS.exe',但有时它会起作用,而且大多数时候它什么都不做.与一个驱动程序运行完美运行的相同程序在并行运行时会发生故障.
我一直试图找到原因,为什么会发生这种情况以及解决这个问题的方法,但我还没有找到任何可以使用的确定方法.
如果可能的话,我如何与Selenium并行进行自动化网页浏览,如果没有,为了做到这一点,我应该在哪里寻找?
在任何情况下是否有理由选择 Parallel.ForEach 而不是 wait ForEachAsync(反之亦然)?或者它们实际上是相同的?
await collection.ForEachAsync( m => { m.DoSomething(); } );
Run Code Online (Sandbox Code Playgroud)
VS
Parallel.ForEach( collection, m => { m.DoSomething(); } );
Run Code Online (Sandbox Code Playgroud) 我正在编写一个小型C应用程序,它使用一些线程来处理数据.我希望能够知道某台机器上的处理器数量,而不使用system()和小脚本.
我能想到的唯一方法是解析/ proc/cpuinfo.任何其他有用的建议?
据我所知到目前为止:Javascript是单线程的.如果您推迟执行某些过程,则只需安排它(将其排队)以在下次线程空闲时运行.但Async.js定义了两种方法:Async::parallel & Async::parallelLimit和我引用:
并行运行一系列函数,无需等到上一个函数完成.如果任何函数将错误传递给其回调...
与并行相同,只有任务与任何时间执行的最大"限制"任务并行执行.
至于我对英语的理解,当你说:"并行完成任务"意味着同时进行 - 同时进行.
Async.js如何在一个线程中并行执行任务?我错过了什么.
javascript parallel-processing asynchronous node.js async.js
"并行性提示"在风暴中用于并行运行的风暴拓扑.我知道有工作流程,执行者和任务等概念.使并行性提示尽可能大有意义,以便尽可能地并行化拓扑?
我的问题是如何为我的风暴拓扑找到一个完美的并行性提示数.它取决于我的风暴群集的规模,还是更像拓扑/作业特定设置,它从一种拓扑到另一种不同?还是取决于两者?
我有一个foreach的问题,我无法搞清楚.以下代码在我尝试过的两台Windows计算机上失败,但在三台Linux计算机上运行成功,所有这些都运行相同版本的R和doParallel:
library("doParallel")
registerDoParallel(cl=2,cores=2)
f <- function(){return(10)}
g <- function(){
r = foreach(x = 1:4) %dopar% {
return(x + f())
}
return(r)
}
g()
Run Code Online (Sandbox Code Playgroud)
在这两台Windows计算机上,返回以下错误:
Error in { : task 1 failed - "could not find function "f""
Run Code Online (Sandbox Code Playgroud)
但是,这在Linux计算机上运行得很好,并且使用%do%而不是%dopar%也可以正常工作,并且适用于常规for循环.
同样是变量,如设置真正的i <- 10和更换return(x + f())用return(x + i)
对于具有相同问题的其他人,有两种解决方法:
1)使用.export显式导入所需的函数和变量:
r = foreach(x=1:4, .export="f") %dopar%
Run Code Online (Sandbox Code Playgroud)
2)导入所有全局对象:
r = foreach(x=1:4, .export=ls(.GlobalEnv)) %dopar%
Run Code Online (Sandbox Code Playgroud)
这些变通方法的问题在于,对于一个积极开发的大型软件包来说,它们并不是最稳定的.无论如何,foreach应该表现得像.
是什么导致了这个以及是否有修复的想法?
该功能的计算机版本信息:
R version 3.2.2 (2015-08-14)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: CentOS release 6.5 (Final)
other …Run Code Online (Sandbox Code Playgroud) 这是关于学习多个模型的先前问题的后续跟进.
用例是我对每个主题都有多个观察结果,我想为每个主题训练一个模型.请参阅哈德利关于如何做到这一点的精彩演讲.
简而言之,这可以使用dplyr和purrr喜欢这样:
library(purrr)
library(dplyr)
library(fitdistrplus)
dt %>%
split(dt$subject_id) %>%
map( ~ fitdist(.$observation, "norm"))
Run Code Online (Sandbox Code Playgroud)
如此以来,建立模型是一个尴尬的并行任务,我在想,如果dplyr,purrr有一个易于使用的此类任务并行机制(如平行map).
如果这些库不提供易于并行化可以把它采用了经典的[R并行库(做parallel,foreach等)?
我实施了3次QuickSort算法并测量了5000万随机数的排序时间:
顺序(花了~14秒)
与Parallel.Invoke()在相同的方法作为排序算法(使用了〜12秒)
与Parallel.Invoke()在单独的方法(使用了约7秒)的
所以我的问题是:Parallel.Invoke()如果呼叫是在一个单独的方法中,为什么会快得多?在我的计算机上,3.示例的速度是2的两倍多.
Parallel.Invoke()在相同的方法作为排序算法public class ParallelQuickSort
{
private const int Threshold = 100;
public static void Sort(int[] array)
{
if (array == null || array.Length == 0)
{
new ArgumentException("number array must be at least of length 1");
}
QuickSort(array, 0, array.Length - 1);
}
private static void QuickSort(int[] array, int left, int right)
{
var i = left;
var j = right; …Run Code Online (Sandbox Code Playgroud) 我有一个想要并行运行的简单函数。如果直接在主函数中指定了该函数,则一切正常。但是,如果从单独的Python文件(该文件创建为包含一系列帮助函数)中调用了完全相同的函数,则代码将失败,并显示以下错误:
任务无法反序列化。请确保函数的参数都是可挑剔的。
我试图运行此代码:
from joblib import Parallel, delayed
import multiprocessing
import otherFile as of
inputs = range(10)
def processInput(i):
return i * i
num_cores = multiprocessing.cpu_count()
results1 = Parallel(n_jobs=num_cores)(delayed(processInput)(i) for i in inputs) # this works
results2 = Parallel(n_jobs=num_cores)(delayed(of.processInput)(i) for i in inputs) # this fails
Run Code Online (Sandbox Code Playgroud)
当我从文件的调用函数processInput()时,我只是在该.py文件中复制了相同的函数。
def processInput(i):
return i * i
Run Code Online (Sandbox Code Playgroud)
如果需要调用的函数位于单独的.py文件中,如何使并行化工作?
这是完整的错误:
results = Parallel(n_jobs=num_cores)(delayed(of.processInput)(i) for i in inputs)
Traceback (most recent call last):
File "<ipython-input-387-d8dd1dc361a6>", line 1, in <module>
results = Parallel(n_jobs=num_cores)(delayed(of.processInput)(i) for i in inputs) …Run Code Online (Sandbox Code Playgroud) c# ×2
python ×2
r ×2
.net-core ×1
apache-storm ×1
async.js ×1
asynchronous ×1
c ×1
doparallel ×1
dplyr ×1
foreach ×1
javascript ×1
node.js ×1
phantomjs ×1
posix ×1
purrr ×1
quicksort ×1
selenium ×1
webdriver ×1