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()
关键点说明:
- 使用
threading.Thread创建两个独立的线程来运行服务 daemon=True确保程序退出时线程会自动终止- 每个服务运行在不同的端口避免冲突
- 主线程通过
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 ………… &
你加个绝对路径还不会么?

