Ubuntu实现多任务处理的核心方法
&可将进程放入后台运行,释放终端供其他操作使用。例如:python3 script1.py &。此方法适合临时后台任务,但终端关闭后进程会终止。&使用,忽略挂起信号(SIGHUP),即使关闭终端,进程仍能继续运行。输出默认重定向到当前目录的nohup.out文件。例如:nohup python3 script2.py &。适合需要持久化的后台任务。tmux new -s mysession(mysession为自定义会话名);Ctrl+b后输入d,返回终端但不终止会话;tmux attach -t mysession。screen -S mysession;Ctrl+a后输入d;screen -r mysession。sudo apt install parallel安装,可并行执行多个命令,提高处理效率。例如:parallel ::: process1 process2 process3(同时运行三个命令);或处理文件:find /path/to/files -name "*.log" | parallel gzip(并行压缩所有.log文件)。支持自定义并行数量(如-j 4表示4个并行任务)。-P参数实现并行,从标准输入读取数据并执行命令。例如:echo -e "task1\n task2\n task3" | xargs -n 1 -P 3 bash -c(-n 1表示每个进程处理一个参数,-P 3表示最多3个并行任务)。#!/bin/bash
python3 script1.py
python3 script2.py
&将任务放入后台,wait命令等待所有后台任务完成。例如:#!/bin/bash
python3 script1.py &
python3 script2.py &
python3 script3.py &
wait # 等待所有后台任务结束
适合批量管理多个脚本或任务,需手动添加错误处理(如|| echo "task failed")。
multiprocessing.Process创建子进程,实现真正的并行(多核CPU利用率高)。例如:import multiprocessing
def task(name):
print(f"Task {name} is running")
if __name__ == "__main__":
processes = []
for i in range(3): # 创建3个进程
p = multiprocessing.Process(target=task, args=(i,))
processes.append(p)
p.start()
for p in processes:
p.join() # 等待所有进程完成
go关键字启动轻量级协程,适合高并发任务。例如:package main
import (
"fmt"
"time"
)
func task(name string) {
fmt.Printf("Task %s is running\n", name)
}
func main() {
go task("A")
go task("B")
time.Sleep(time.Second) // 等待协程完成
}
适合复杂的多任务场景,如网络请求、数据处理等。
对于需要开机自启、长期运行的任务,可使用systemd创建服务。步骤如下:
sudo vim /etc/systemd/system/myservice.service;[Unit]
Description=My Background Service
After=network.target
[Service]
ExecStart=/usr/bin/python3 /path/to/script.py
Restart=always # 失败后自动重启
User=your_username
[Install]
WantedBy=multi-user.target
sudo systemctl start myservice
sudo systemctl enable myservice # 开机自启
sudo systemctl status myservice。journalctl -u myservice)、自动重启等功能。