我有一个python项目,它由3个无限运行的Python脚本组成,我想同时运行它们。他们是:
我尝试在shell脚本中使用sh运行这三个文件。但是一旦web.py运行,似乎其他Python文件在队列中等待,直到web.py完成作业然后将被执行。但是web.py永远不会完成这项工作,因为它会不断循环。我希望脚本按以下顺序执行:web.py,pir.py,然后是keypadd.py。
我该怎么做?
我使用的Shell脚本:
#!/bin/sh
# launcher.sh
cd /home/pi/Ptoject
sudo python web.py
sudo python pir.py
sudo python keypadd.py
答案 0 :(得分:3)
另一个选择是使用Python包装器脚本而不是shell脚本,导入所需的功能,并在其他进程中运行它们:
import time
import mutliprocessing
import web
import pir
import keypadd
processes = []
for func in [web.function, pir.function, keypadd.function]:
processes.append(multiprocessing.Process(target=func, args=(arg1, arg2)))
processes[-1].start()
# Do stuff
while True:
time.sleep(600) # sleep for 10 minutes
living_processes = [p.is_alive() for p in processes]
if living_processes < 3:
for p in living_processes:
p.terminate()
print("Oops: Some processes died")
# do other error handling here if necessary
这种方法有一些好处:
答案 1 :(得分:0)
#!/bin/sh
# launcher.sh
cd /home/pi/Ptoject
sudo python web.py & sudo python pir.py & sudo python keypadd.py
另一种解决方案是使用supervisord并对您的文件进行守护。
答案 2 :(得分:0)
添加&符号来分叉流程 -
cd /home/pi/Ptoject
sudo python web.py &
sudo python pir.py &
sudo python keypadd.py