我有一个脚本main.py
,该脚本从库中调用了函数fun
。
我只想退出fun
,继续执行脚本main.py
,为此使用另一个脚本kill_fun.py
。
我尝试对ps
使用不同的bash命令(使用os.system),但是它给我的pid仅指向main.py
。
示例:
-main.py
from lib import fun
if __name__ == '__main__':
try:
fun()
except:
do_something
do_something_else
-lib.py
def fun():
do_something_of_long_time
-kill_fun.py
if __name__ == '__main__':
kill_only_fun
答案 0 :(得分:0)
您可以通过在其他过程中运行fun
来实现。
from time import sleep
from multiprocessing import Process
from lib import fun
def my_fun():
tmp = 0
for i in range(1000000):
sleep(1)
tmp += 1
print('fun')
return tmp
def should_i_kill_fun():
try:
with open('./kill.txt','r') as f:
read = f.readline().strip()
#print(read)
return read == 'Y'
except Exception as e:
return False
if __name__ == '__main__':
try:
p = Process(target=my_fun, args=())
p.start()
while p.is_alive():
sleep(1)
if should_i_kill_fun():
p.terminate()
except Exception as e:
print("do sth",e)
print("do sth other thing")
要杀死fun
,只需echo 'Y' > kill.txt
或者您也可以编写python脚本来编写文件。
说明
这个想法是在一个不同的过程中启动fun
。 p
是您可以控制的流程处理程序。然后,我们放入一个循环来检查文件kill.txt
,以查看是否存在kill命令'Y'。如果是,则调用p.terminate()
。然后,该过程将被终止,并继续执行下一步操作。
希望这会有所帮助。