我有两个python脚本,它们针对正在处理的项目使用两个不同的摄像头,并且试图在不同的脚本中或彼此之间运行它们,这两种方法都很好。
#include <map>
using t_Key = long int;
using t_Value = long int;
using t_Comparator = bool ( * )(t_Key const left, t_Key const right);
using t_Map = ::std::map<t_Key, t_Value, t_Comparator>;
bool Is_Less(t_Key const left, t_Key const right)
{
return left < right;
}
bool Is_Greater(t_Key const left, t_Key const right)
{
return left > right;
}
int main()
{
int Side{};
t_Map current_book{(Side == 1) ? &Is_Less : &Is_Greater};
return 0;
}
但是,我的问题是它们不能同时运行,我必须退出第一个才能打开下一个。我还尝试了使用bash以及&shell运算符
import os
os.system('python 1.py')
os.system('python 2.py')
这确实使它们都运行,但是问题是它们都在后台无休止地运行,因此我需要相当容易地将它们关闭。任何建议我可以做些什么来避免这些实现的问题
答案 0 :(得分:2)
您可以使用multiprocessing
import os
import time
import psutil
from multiprocessing import Process
def run_program(cmd):
# Function that processes will run
os.system(cmd)
# Initiating Processes with desired arguments
program1 = Process(target=run_program, args=('python 1.py',))
program2 = Process(target=run_program, args=('python 2.py',))
# Start our processes simultaneously
program1.start()
program2.start()
def kill(proc_pid):
process = psutil.Process(proc_pid)
for proc in process.children(recursive=True):
proc.kill()
process.kill()
# Wait 5 seconds and kill first program
time.sleep(5)
kill(program1.pid)
program1.join()
# Wait another 1 second and kill second program
time.sleep(1)
kill(program2.pid)
program2.join()
# Print current status of our programs
print('1.py alive status: {}'.format(program1.is_alive()))
print('2.py alive status: {}'.format(program2.is_alive()))
答案 1 :(得分:0)
一种可能的方法是使用systemd
来控制您的进程(即将其视为守护程序)。
这是我控制我的Python服务器的方式,因为它们需要在后台运行并与当前的tty
完全分离,以便退出与计算机的连接,并继续执行继续的过程。然后,您也可以稍后使用systemctl
停止服务器,如下所述。
说明:
创建一个.service
文件并将其保存在/etc/systemd/system
中,内容如下:
[Unit]
Description=daemon one
[Service]
ExecStart=/path/to/1.py
,然后重复一次,转到2.py
。
然后,您可以使用systemctl
控制守护程序。
首先使用以下命令重新加载所有配置文件:
systemctl daemon-reload
然后启动您的两个守护进程(其中my_daemon.service
是您的单元文件之一):
systemctl start my_daemon
它现在应该正在运行,您应该在以下位置找到它:
systemctl list-units
您还可以通过以下方式查看其状态:
systemctl status my_daemon
和stop
/ restart
与他们:
systemctl stop|restart my_daemon
答案 2 :(得分:0)