本文目录导读:

- 使用
&符号(Linux/Mac) - 使用
nohup命令(Linux/Mac) - 使用
subprocess模块 - 使用
multiprocessing模块 - 使用
threading模块 - Windows 上的特殊处理
- 使用
schedule库定时运行 - 完整的后台服务示例
- 使用建议
- 进程管理工具示例(supervisor)
在Python中,有多种方法可以让程序在后台运行,以下是一些常见的实现方式:
使用 & 符号(Linux/Mac)
# 在命令后添加 & 符号 python your_script.py &
使用 nohup 命令(Linux/Mac)
# 即使关闭终端也能继续运行 nohup python your_script.py > output.log 2>&1 &
使用 subprocess 模块
import subprocess
import sys
# 在后台运行另一个Python脚本
subprocess.Popen([sys.executable, "your_script.py"],
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL)
使用 multiprocessing 模块
import multiprocessing
import time
def background_task():
while True:
print("后台任务运行中...")
time.sleep(5)
# 创建后台进程
process = multiprocessing.Process(target=background_task)
process.daemon = True # 主进程退出时,子进程也退出
process.start()
# 主程序继续执行其他任务
print("主程序继续运行...")
time.sleep(10)
print("主程序结束")
使用 threading 模块
import threading
import time
def background_task():
while True:
print("后台线程运行中...")
time.sleep(3)
# 创建后台线程
thread = threading.Thread(target=background_task)
thread.daemon = True # 主线程退出时,子线程也退出
thread.start()
# 主程序继续执行
print("主程序继续运行...")
time.sleep(10)
print("主程序结束")
Windows 上的特殊处理
使用 pythonw.exe(Windows)
# 无控制台窗口运行 pythonw.exe your_script.py
使用 win32 模块
import win32api
import win32con
import win32process
# 创建后台进程
win32api.CreateProcess(
None, # 应用程序名
"python your_script.py", # 命令行
None, # 进程安全属性
None, # 线程安全属性
False, # 继承句柄
win32process.CREATE_NO_WINDOW, # 创建标志
None, # 环境变量
None, # 当前目录
win32process.STARTUPINFO() # 启动信息
)
使用 schedule 库定时运行
import schedule
import time
import threading
def background_job():
print("执行定时任务...")
def run_scheduler():
schedule.every(10).seconds.do(background_job)
while True:
schedule.run_pending()
time.sleep(1)
# 在后台线程中运行调度器
scheduler_thread = threading.Thread(target=run_scheduler)
scheduler_thread.daemon = True
scheduler_thread.start()
# 主程序继续
print("主程序运行中...")
time.sleep(30)
完整的后台服务示例
#!/usr/bin/env python
import sys
import os
import time
import logging
from daemon import DaemonContext # 需要安装 python-daemon
class BackgroundService:
def __init__(self, name="background_service"):
self.name = name
self.setup_logging()
def setup_logging(self):
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
filename=f'{self.name}.log'
)
self.logger = logging.getLogger(self.name)
def run(self):
self.logger.info(f"服务 {self.name} 启动")
try:
while True:
# 执行后台任务
self.logger.info("执行后台任务...")
time.sleep(60)
except KeyboardInterrupt:
self.logger.info("服务停止")
sys.exit(0)
if __name__ == "__main__":
# 作为守护进程运行
with DaemonContext():
service = BackgroundService()
service.run()
使用建议
- 开发阶段:使用
&或nohup - 简单脚本:使用
subprocess - 需要并发:使用
multiprocessing或threading - 生产环境:使用进程管理工具(如
supervisor、systemd)
进程管理工具示例(supervisor)
# /etc/supervisor/conf.d/myapp.conf [program:myapp] command=python /path/to/your_script.py directory=/path/to/your_app autostart=true autorestart=true stderr_logfile=/var/log/myapp.err.log stdout_logfile=/var/log/myapp.out.log
选择哪种方法取决于你的具体需求、操作系统和部署环境,对于简单的后台运行需求,使用 nohup 或 & 就足够了;对于复杂的生产环境,建议使用专业的进程管理工具。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播