如何在 NodeJS 中并发执行一个函数
How to execute a function concurrently in NodeJS
在 Python 中,我有一个多处理工具 API,它将函数名称和参数列表作为输入,并根据您定义的大小生成进程。假设我有一个函数;
function viewSite(url) {
console.log('Processing..'+url)
axios.get()...
}
如果我有一个包含 4 个 URL 的列表,我如何生成多个在单独的进程中执行的进程 space?
javascript会被一个线程正常解释和执行,不可能像你想的那样启动线程,但是:
您可以使用已添加的工作线程 https://nodejs.org/api/worker_threads.html 将一些工作分配给不同的 CPU 核心(在您的情况下您不需要这个,没有代码中的大量计算)
您可以为此 https://nodejs.org/api/child_process.html 使用一个新的子进程,它必须在您的系统上可用。这是个坏主意,复杂度太高了
您应该异步开发代码并使用 async/await,例如:
async function viewSite(url) {
console.log('Processing..'+url);
try{
const res = await axios.get(url);
return res.data;
} catch(error){
// do something or throw error;
}
}
async function collectAllSitesData(){
const results = await Promise.all([viewSite(url1),viewSite(url2),...]);
// do something with results here, not after call of collectAllSitesData()
}
collectAllSitesData();
async functions return Promise,所以检查如何使用 async-approach,例如:https://javascript.info/async-await
在 Python 中,我有一个多处理工具 API,它将函数名称和参数列表作为输入,并根据您定义的大小生成进程。假设我有一个函数;
function viewSite(url) {
console.log('Processing..'+url)
axios.get()...
}
如果我有一个包含 4 个 URL 的列表,我如何生成多个在单独的进程中执行的进程 space?
javascript会被一个线程正常解释和执行,不可能像你想的那样启动线程,但是:
您可以使用已添加的工作线程 https://nodejs.org/api/worker_threads.html 将一些工作分配给不同的 CPU 核心(在您的情况下您不需要这个,没有代码中的大量计算)
您可以为此 https://nodejs.org/api/child_process.html 使用一个新的子进程,它必须在您的系统上可用。这是个坏主意,复杂度太高了
您应该异步开发代码并使用 async/await,例如:
async function viewSite(url) {
console.log('Processing..'+url);
try{
const res = await axios.get(url);
return res.data;
} catch(error){
// do something or throw error;
}
}
async function collectAllSitesData(){
const results = await Promise.all([viewSite(url1),viewSite(url2),...]);
// do something with results here, not after call of collectAllSitesData()
}
collectAllSitesData();
async functions return Promise,所以检查如何使用 async-approach,例如:https://javascript.info/async-await