我想通过测量随着进程数量增加而做某事所花费的时间来测量我的数据库的性能.目的是绘制一个性能与过程数量的图表,任何人都知道如何?我是elrlang的初学者,请你好
我想不断检查数据库中的表以获取要运行的命令。某些命令可能需要 4 分钟才能完成,大约需要 10 秒。
因此我想在线程中运行它们。所以每条记录都会创建新的线程,并且在创建线程后,记录被删除。
因为数据库查找 + 线程创建将在无限循环中运行,我如何从线程获取“响应”(线程将发出 shell 命令并获取我想阅读的响应代码)?
我想过创建两个无限循环的线程: - 第一个用于数据库查找 + 创建新线程 - 第二个用于......以某种方式读取线程结果并对每个响应采取行动
或者也许我应该使用 fork,或者 os 产生一个新进程?
我想使用节点js执行exe。这是Windows命令提示符中命令的外观:
oplrun -D VersionId=3458 -de "output.dat" "Test.mod" "Test.dat"
Run Code Online (Sandbox Code Playgroud)
运行正常,我在output.dat文件中得到了输出。现在,我想使用nodejs执行相同的操作,为此我使用了execFile。如果我运行,它将运行正常:
var execFile = require('child_process').execFile;
execFile('oplrun',['Test.mod','Test.dat'], function(err, data) {
if(err) {
console.log(err)
}
else
console.log(data.toString());
});
Run Code Online (Sandbox Code Playgroud)
但是,如果我想将输出文件或版本作为参数传递,它将无法执行,并且也不会出现任何错误。这是代码:
var execFile = require('child_process').execFile;
var path ='D:\\IBM\\ILOG\SAMPLE\\output.dat';
execFile('oplrun', ['-de',path],['Test.mod','Test.dat'], function(err, data) {
if(err) {
console.log(err)
}
else
console.log(data.toString());
});
Run Code Online (Sandbox Code Playgroud)
如果需要传递-D VersionId = 1111或-de output.dat之类的参数,该如何传递参数。
谢谢阿吉斯
我正在尝试运行 cURL 命令以通过 安装 RVM 和 ruby child_process.spawn,但它总是出错:
let spawnProcess = spawn('\curl -sSL https://get.rvm.io | bash -s stable --ruby')
spawnProcess.stdout.on('data', data => {
console.log('DATA RECEIVED')
console.log(data)
})
spawnProcess.stdout.on('close', () => {
alert('done!')
})
spawnProcess.stderr.on('data', function(){
console.log('ON DATA')
console.log(arguments)
})
spawnProcess.on('error', error => {
console.log('ON ERROR')
console.log(JSON.stringify(error), error)
})
Run Code Online (Sandbox Code Playgroud)
我收到的错误是:
{"code":"ENOENT","errno":"ENOENT","syscall":"spawn curl -sSL https://get.rvm.io | bash -s stable --ruby","path":"curl -sSL https://get.rvm.io | bash -s stable --ruby","spawnargs":[]} Error: spawn curl -sSL https://get.rvm.io | bash -s stable --ruby ENOENT
at exports._errnoException (util.js:890:11) …Run Code Online (Sandbox Code Playgroud) 我有可以在 Windows 上运行的 Python 代码,但是在 Linux 上运行时它就会挂起。我正在使用 JPype,因此我怀疑多个共享进程尝试使用同一管道访问 Java 可能存在一些问题(创建了不同的进程,但挂在 JPype 行)。有没有办法强制在 Pathos 中生成以复制 Windows 实现?(例如常规多处理库中的 set_start_method 或 get_context ?)
谢谢。
我正在尝试在 Node.JS 中“生成”一个 python 脚本。python 脚本接受多个文件路径作为参数。此命令有效:
python3 script.py 'path1' 'path2' 'path3'
Run Code Online (Sandbox Code Playgroud)
在节点中,我得到了一个带有路径的 var:
args = ["path1", "path2", "path3"]
Run Code Online (Sandbox Code Playgroud)
但是当我尝试生成脚本时:
var spawn = require("child_process").spawn;
var pyspawn = spawn(
'python3', [pyscript.py, args]
);
Run Code Online (Sandbox Code Playgroud)
但这似乎发出命令:
python3 script.py [path1,path2,path3]
Run Code Online (Sandbox Code Playgroud)
修改各种 concat()s、join()s 和 toString()s,我可以得到如下内容:
python3 script.py "'path1' 'path2' 'path3'"
Run Code Online (Sandbox Code Playgroud)
......但不能为我的生活想出如何简单地做到这一点
在我的节点应用程序中,我使用child_process.spawn来查询当前存储库中的信息
我已经构建了一个小函数来返回一个promise,该promise通过命令的响应来解析:
const spawn = require('child_process').spawn;
const gitExec = command => (
new Promise((resolve, reject) => {
const thread = spawn('git', command);
const stdOut = [];
const stdErr = [];
thread.stdout.on('data', (data) => {
stdOut.push(data.toString('utf8'));
});
thread.stderr.on('data', (data) => {
stdErr.push(data.toString('utf8'));
});
thread.on('close', () => {
if (stdErr.length) {
reject(stdErr.join(''));
return;
}
resolve(stdOut.join());
});
})
);
module.exports = gitExec;
Run Code Online (Sandbox Code Playgroud)
呼叫git branch按预期工作:
gitExec(['branch'])
.then((branchInfo) => {
console.log(branchInfo);
})
Run Code Online (Sandbox Code Playgroud)
(如预期的那样)导致
* develop
feature/forever
feature/sourceconfig
feature/testing
master
Run Code Online (Sandbox Code Playgroud)
根据我的理解,这证明了我用来实际工作的方法. …
我正在开发一个小型 cli 工具,它可以根据目录中设置的项目自动部署 Google Home 操作。
基本上我的脚本检查目录,然后询问要部署哪个项目。应该运行的实际命令来自 Google 的 cli gactions
为了使用参数运行它,我在节点脚本中设置了一个生成的进程:
const { spawn } = require('child_process')
const child = spawn('./gactions', [
'update',
'--action-package',
'<PATH-TO-PACKAGE>',
'--project',
'<PROJECT-NAME>'
])
child.stdout.on('data', data => {
console.log(data)
}
Run Code Online (Sandbox Code Playgroud)
但是,第一次部署项目时,gactions cli 将提示输入授权代码。运行上面的代码,我实际上可以看到提示,但实际输入该代码时脚本不会继续。
我想子进程中一定有某种方法来捕获该输入?或者这根本不可能?
我正在尝试捕获从用 NodeJS 编写的 AWS Lambda 启动的外部程序的输出。下面的完整示例代码。任何测试事件都可以,因为它并没有真正使用。
exports.handler = async (event) => {
console.log ("Entering lambda" + JSON.stringify(event))
var spawn = require('child_process').spawnSync;
child_process = spawn ('aws', [' --version'], {
stdio: 'inherit',
stderr: 'inherit',
shell: true
})
console.log ("done");
const response = {
statusCode: 200,
body: JSON.stringify('done'),
};
return response;
};
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我得到以下输出(为了简洁起见,我删除了测试事件详细信息,因为它无关紧要)。
我没有看到aws --version我预期的命令的结果(我使用它来测试 AWS CLI 的正确调用,但任何 Linux 命令都可以)。代码确实是同步执行的,因为如果我用 替换调用child_process = spawn ('sleep', ['1'], {,lambda 的执行时间会增长到 1117.85 毫秒,所以会发生一秒钟的睡眠。但是执行日志中没有捕获任何内容。
START RequestId: 0c1287e2-d2ee-4436-a577-bc8ec3608120 Version: $LATEST
2019-01-16T19:12:45.130Z …Run Code Online (Sandbox Code Playgroud) 为什么下面列出了两种产卵方法之间的区别?
1> G = fun(X) -> io:format("~p ", [X]) end.
#Fun<erl_eval.44.97283095>
2> [spawn(fun() -> G(X) end) || X <- [1, 2, 3] ].
1 2 3 [<0.82.0>,<0.83.0>,<0.84.0>]
3> [spawn(fun() -> fun(X) -> io:format("~p ", [X]) end end) || X <- [1, 2, 3] ].
[<0.86.0>,<0.87.0>,<0.88.0>]
4>
Run Code Online (Sandbox Code Playgroud) spawn ×10
node.js ×6
erlang ×2
process ×2
aws-lambda ×1
curl ×1
exe ×1
execfile ×1
git ×1
google-home ×1
javascript ×1
linux ×1
mnesia ×1
pathos ×1
python-3.5 ×1
ruby ×1