Python中如何通过命令行同时启动一个py文件中的两个服务

str_one=('python app.py --port=8099') str_two=('python app.py --port=8098') os.system(str_one) os.system(str_two)

这样写只会启动一个。是因为只 fork 了一个子进程 然后等待它结束 再往下运行 有什么办法同时运行两句命令启动两个服务呢

谢谢


Python中如何通过命令行同时启动一个py文件中的两个服务

13 回复

用 nohup 试试?或者 Supervisor


要在一个Python文件中同时启动两个服务,最简单直接的方式是使用threading模块来并行运行。下面是一个完整的示例,演示了如何在一个脚本中启动两个简单的HTTP服务(分别运行在8000和8001端口):

import threading
import time
from http.server import HTTPServer, SimpleHTTPRequestHandler

def run_server(port, server_name):
    """启动一个简单的HTTP服务器"""
    server_address = ('', port)
    httpd = HTTPServer(server_address, SimpleHTTPRequestHandler)
    print(f"{server_name} 服务启动在端口 {port}")
    httpd.serve_forever()

def main():
    # 创建并启动第一个服务线程
    server1 = threading.Thread(target=run_server, args=(8000, "服务A"), daemon=True)
    server1.start()
    
    # 创建并启动第二个服务线程
    server2 = threading.Thread(target=run_server, args=(8001, "服务B"), daemon=True)
    server2.start()
    
    print("两个服务已启动,按 Ctrl+C 停止")
    
    # 主线程保持运行,直到被中断
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        print("\n正在停止服务...")

if __name__ == "__main__":
    main()

关键点说明:

  1. 使用threading.Thread创建两个独立的线程来运行服务
  2. daemon=True确保程序退出时线程会自动终止
  3. 每个服务运行在不同的端口避免冲突
  4. 主线程通过time.sleep()保持运行,直到收到中断信号

运行方式:

python your_script.py

替代方案:

  • 如果服务需要更复杂的协调,可以考虑使用multiprocessing模块
  • 对于生产环境,建议使用专门的进程管理工具(如supervisor)

一句话建议:用多线程并行启动,注意端口不要冲突。

搜 python threading

此时不能用 os.system ,因为退出才返回
可以用 os.popen 试试

popen 呀,另外不要用楼上说的 os.popen,那个已经被标记为过时的了,平时用 popen 模块

要开多进程才行

import subprocess
subprocess.Popen(str_one)
subprocess.Popen(str_two)

它会报 没有这个文件 的错误 但是 os.popen 就可以直接执行

试试用绝对路径 另外参数加上 shell=True

对, 可以了 谢谢 另外 你知道怎么关闭文件的时候 kill 掉所有的子进程吗 只能手动吗

注册信号处理函数 在 signal 库里 可以调用子进程对象的 kill 方法

或者记录子进程的 pid 用 os.kill() 前一种方法比较好一些但是说实话业务写完一般都得手动退出 多进程很容易出现不能完全退出的情况…

能用 & 吗
python ………… &

你加个绝对路径还不会么?

回到顶部