我在Bash中有一个字符串:
string="My string"
Run Code Online (Sandbox Code Playgroud)
如何测试它是否包含另一个字符串?
if [ $string ?? 'foo' ]; then
echo "It's there!"
fi
Run Code Online (Sandbox Code Playgroud)
??我的未知运营商在哪里?我是否使用echo grep?
if echo "$string" | grep 'foo'; then
echo "It's there!"
fi
Run Code Online (Sandbox Code Playgroud)
这看起来有点笨拙.
如何在bash脚本中等待从该脚本生成的几个子进程完成并返回退出代码!= 0当任何子进程以代码结束时!= 0?
简单的脚本:
#!/bin/bash
for i in `seq 0 9`; do
doCalculations $i &
done
wait
Run Code Online (Sandbox Code Playgroud)
上面的脚本将等待所有10个生成的子进程,但它总是会给出退出状态0(请参阅参考资料help wait).如何修改此脚本,以便它发现生成的子进程的退出状态,并在任何子进程以代码!= 0结束时返回退出代码1?
有没有更好的解决方案,而不是收集子流程的PID,按顺序等待它们并总结退出状态?
从命令行中,您如何判断运行Mac OS X时机器上有多少个核心?在Linux上,我使用:
x=$(awk '/^processor/ {++n} END {print n+1}' /proc/cpuinfo)
Run Code Online (Sandbox Code Playgroud)
它并不完美,但它很接近.这是为了获取make,这就是为什么它给出比实际数字高1的结果.我知道上面的代码可以用Perl编写,也可以用grep,wc和cut编写,但我认为上面的内容在简洁性和可读性之间是一个很好的权衡.
非常晚编辑:只是为了澄清:我问有多少逻辑核可用,因为这与我想要make产生多少个同时工作相对应.jkp的答案,由Chris Lloyd进一步完善,正是我所需要的.因人而异.
我正在运行以下命令来获取Linux中的处理器/核心数量:
cat /proc/cpuinfo | grep processor | wc -l
Run Code Online (Sandbox Code Playgroud)
它有效,但看起来并不优雅.你会怎么建议改进它?
我目前正在尝试确定每个Amazon实例类型的适当工作人数.我曾经经营过一名Gunicorn工人,但事实证明这很慢.
许多开发人员目前正在使用此公式来衡量适合的工人数量:
NUM_WORKERS=3 #recommended formula here is 1 + 2 * NUM_CORES
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,亚马逊对每个实例运行的核心数量并不十分清楚.例如,M1小实例有1个EC2计算单元(1个虚拟核心和1个EC2计算单元)
这基本上意味着什么?它有一个核心?或者它有两个核心?
worker-process worker amazon-ec2 amazon-web-services gunicorn
阅读完这个问题的答案后: 将"make"默认为"make -j 8"
我想知道是否有办法让-j选项自动使用正确数量的编译线程?
所以我说make.和make命令本身使用6个或4个或8个线程取决于硬件上?
尝试找出使用python multiprocessing运行的正确并行进程数。
下面的脚本在 8 核、32 GB (Ubuntu 18.04) 计算机上运行。(在测试以下内容时,仅运行系统进程和基本用户进程。)
经过测试multiprocessing.Pool并apply_async具有以下内容:
from multiprocessing import current_process, Pool, cpu_count
from datetime import datetime
import time
num_processes = 1 # vary this
print(f"Starting at {datetime.now()}")
start = time.perf_counter()
print(f"# CPUs = {cpu_count()}") # 8
num_procs = 5 * cpu_count() # 40
def cpu_heavy_fn():
s = time.perf_counter()
print(f"{datetime.now()}: {current_process().name}")
x = 1
for i in range(1, int(1e7)):
x = x * i
x = x / i
t_taken = …Run Code Online (Sandbox Code Playgroud) python parallel-processing multiprocessing python-3.x python-3.6
我使用并行和收集多核R包中的函数来并行化简单的矩阵乘法代码.答案是正确的,但并行版本似乎与串行版本相同.
我怀疑它只在一个核心上运行(而不是我机器上的8个核心!).有没有办法检测到这一点,并确保使用超过1个核心?
这是我的代码:
library("multicore")
A = read.table("matrixA.txt")
B = read.table("matrixB.txt")
A = as.matrix(A)
B = as.matrix(B)
rows = dim(A)[1]
columns = dim(B)[2]
C <- mcparallel(A%*%B)
C <- collect(list(C))
C <- as.matrix(C[[1]])
write.table(C,"matrixC_mc.txt",row.names=FALSE, col.names=FALSE)
Run Code Online (Sandbox Code Playgroud) 有没有办法确定目标机器在GCC下的C/C++编译时有多少物理内核?
我知道其他方法,比如td::thread::hardware_concurrency()在C++ 11中,sysconf(_SC_NPROCESSORS_ONLN)但我很想知道在编译时是否真的有办法获取这些信息.
bash ×4
makefile ×2
alias ×1
amazon-ec2 ×1
c ×1
c++ ×1
command-line ×1
compile-time ×1
gcc ×1
gunicorn ×1
linux ×1
macos ×1
multicore ×1
process ×1
python ×1
python-3.6 ×1
python-3.x ×1
r ×1
string ×1
substring ×1
wait ×1
worker ×1