多线程下 ruby rb_gc() crash的问题.

讨论了Ruby在默认情况下未进行线程安全设置的问题,并提供了在异步环境下如何通过建立委托列表和直接投递操作至Ruby线程以避免GC导致的Crash的方法。重点介绍了关键步骤和实践建议。

默认情况下ruby是没有做线程安全的 .然而在 c 频繁的调用ruby的时候. gc 就会启动. 如果实在异步情况下触发的gc.就会直接crash...

所以必须在ruby线程建立一个委托列表.  异步的时候直接将一个操作 投递到ruby线程(也就是 调用 ruby_init 的那个线程)..让ruby线程去执行.记录一下.

# 激活 conda 环境 source activate KofamKOALA-dependency export PATH="/share/home/cli25/miniconda3/envs/KofamKOALA-dependency/bin/hmmsearch:$PATH" export PATH="/share/home/cli25/zy/10.16/GCpep_output_Final/kofam_scan-1.3.0:$PATH" # 检查环境是否激活成功 if [ -z "$CONDA_PREFIX" ]; then echo "ERROR: Conda 环境激活失败" exit 1 fi echo "当前Conda环境: $CONDA_PREFIX" # 检查必要命令是否可用 echo "检查必要工具:" which exec_annotation || echo "WARNING: exec_annotation 未找到" which ruby || echo "WARNING: ruby 未找到" which hmmsearch || echo "WARNING: hmmsearch 未找到" ########################################################################### # 路径和文件检查 ########################################################################### echo "=== 检查输入文件和配置 ===" # 设置路径(请根据你的实际路径修改) KOFAM_DIR="/share/home/cli25/zy/10.16/GCpep_output_Final/kofam_scan-1.3.0" PROTEIN_FILE="/share/home/cli25/zy/10.16/GCpep_output_Final/GC_pep.fa" OUTPUT_DIR="/share/home/cli25/zy/10.16/kofam_results" CONFIG_FILE="$KOFAM_DIR/config.yml" # 创建输出目录 mkdir -p $OUTPUT_DIR # 检查输入文件 if [ ! -f "$PROTEIN_FILE" ]; then echo "ERROR: 蛋白序列文件不存在: $PROTEIN_FILE" exit 1 fi if [ ! -f "$CONFIG_FILE" ]; then echo "ERROR: 配置文件不存在: $CONFIG_FILE" exit 1 fi # 检查数据库文件 if [ ! -d "$KOFAM_DIR/profiles" ]; then echo "ERROR: HMM数据库目录不存在: $KOFAM_DIR/profiles" exit 1 fi if [ ! -f "$KOFAM_DIR/ko_list" ]; then echo "ERROR: KO列表文件不存在: $KOFAM_DIR/ko_list" exit 1 fi echo "输入文件检查通过:" echo " 蛋白文件: $(wc -l < $PROTEIN_FILE) 条序列" echo " 配置文件: $CONFIG_FILE" echo " 输出目录: $OUTPUT_DIR" ########################################################################### # 验证配置文件 ########################################################################### echo "=== 验证配置文件 ===" # 检查配置文件关键项 echo "配置文件内容摘要:" grep -E "^(profile|ko_list|cpu|parallel):" $CONFIG_FILE # 验证路径是否正确 PROFILE_PATH=$(grep "^profile:" $CONFIG_FILE | awk '{print $2}') KO_LIST_PATH=$(grep "^ko_list:" $CONFIG_FILE | awk '{print $2}') if [ ! -d "$PROFILE_PATH" ]; then echo "ERROR: 配置中的profile路径不存在: $PROFILE_PATH" exit 1 fi if [ ! -f "$KO_LIST_PATH" ]; then echo "ERROR: 配置中的ko_list路径不存在: $KO_LIST_PATH" exit 1 fi echo "配置文件验证通过" ########################################################################### # 运行 KofamKOALA 分析 ########################################################################### echo "=== 开始 KofamKOALA 分析 ===" echo "开始时间: $(date)" # 主要分析命令 exec_annotation \ --config $CONFIG_FILE \ -o $OUTPUT_DIR/kegg_annotation.txt \ -f mapper \ -E 1e-5 \ $PROTEIN_FILE 出现问题/share/home/cli25/miniconda3/envs/KofamKOALA-dependency/lib/ruby/3.4.0/open3.rb:534:in 'Kernel#spawn': No such file or directory - 4 (Errno::ENOENT) from /share/home/cli25/miniconda3/envs/KofamKOALA-dependency/lib/ruby/3.4.0/open3.rb:534:in 'Open3.popen_run' from /share/home/cli25/miniconda3/envs/KofamKOALA-dependency/lib/ruby/3.4.0/open3.rb:235:in 'Open3.popen3' from /share/home/cli25/zy/10.16/GCpep_output_Final/kofam_scan-1.3.0/lib/kofam_scan/parallel.rb:27:in 'KofamScan::Parallel#exec' from /share/home/cli25/zy/10.16/GCpep_output_Final/kofam_scan-1.3.0/lib/kofam_scan/executor.rb:107:in 'KofamScan::Executor#run_hmmsearch' from /share/home/cli25/zy/10.16/GCpep_output_Final/kofam_scan-1.3.0/lib/kofam_scan/executor.rb:35:in 'KofamScan::Executor#execute' from /share/home/cli25/zy/10.16/GCpep_output_Final/kofam_scan-1.3.0/lib/kofam_scan/executor.rb:8:in 'KofamScan::Executor.execute' from /share/home/cli25/zy/10.16/GCpep_output_Final/kofam_scan-1.3.0/lib/kofam_scan/cli.rb:21:in 'KofamScan::CLI.run' from //share/home/cli25/zy/10.16/GCpep_output_Final/kofam_scan-1.3.0/exec_annotation:7:in '<main>'
10-18
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值