本帖最后由 Cool_Breeze 于 2021-1-19 17:25 编辑
主进程就收任务,不管前面任务是否完成,都将其关闭,然后新开进程处理当前任务!(像似猴子搬玉米)
不知道在写啥!思路不清晰。(本来想写线程的,但是好像线程无法中途终止,有知道的大佬请提点一下!)
执行结果:
dict_keys([])
输入 q 退出主程序!
请输入运行程序名:a
dict_keys(['a'])
输入 q 退出主程序!
请输入运行程序名:程序 a 即将在 10 秒后停止
程序 a 即将在 9 秒后停止
程序 a 即将在 8 秒后停止
d程序 a 即将在 7 秒后停止
========================
程序 a 已停止
========================
dict_keys(['d'])
输入 q 退出主程序!
请输入运行程序名:程序 d 即将在 10 秒后停止
程序 d 即将在 9 秒后停止
程序 d 即将在 8 秒后停止
c
========================
程序 d 已停止
========================
dict_keys(['c'])
输入 q 退出主程序!
请输入运行程序名:程序 c 即将在 10 秒后停止
程序 c 即将在 9 秒后停止
程序 c 即将在 8 秒后停止
程序 c 即将在 7 秒后停止
程序 c 即将在 6 秒后停止
程序 c 即将在 5 秒后停止
程序 c 即将在 4 秒后停止
程序 c 即将在 3 秒后停止
c
****************************
程序 c 正在运行中...
****************************
dict_keys(['c'])
输入 q 退出主程序!
请输入运行程序名:程序 c 即将在 2 秒后停止
程序 c 即将在 1 秒后停止
[Python] 纯文本查看 复制代码 # coding=utf-8
# python 3.7.9
import multiprocessing
import time
class myProcess(multiprocessing.Process): # 单继承
def __init__(self, name, n):
super().__init__() # 初始化进程
self.name = name
self.n = n
self.daemon = True # 跟随主进程结束
def run(self):
while self.n:
print(f'程序 {self.name} 即将在 {self.n} 秒后停止')
self.n -= 1
time.sleep(0.6)
exit(0)
def kill(self): # 重写kill,添加一点内容
super().kill()
print('========================')
print(f'程序 {self.name} 已停止')
print('========================')
if __name__ == '__main__':
'''
输入程序名,启动程序(只能运行一个程序)
程序已在运行中,提示正在运行
程序不在运行中,停止前一个程序,然后在启动新程序
'''
pool = {}
while True:
print(pool.keys())
name = input('输入 q 退出主程序!\n请输入运行程序名:')
if name in pool.keys(): # 检查程序是否已在运行(不做任何事)
if pool[name].is_alive():
print('****************************')
print(f'程序 {name} 正在运行中...')
print('****************************')
else:
pool.pop(name)
pool.update({name:myProcess(name, 10)})
pool[name].start()
elif name == 'q': break # 退出主程序
else:
if len(pool) == 1: # 检查是否有一个进程在运行(有就结束它)
oldName = list(pool.keys())[0]
if pool[oldName].is_alive(): # 检查进程是否存活(存活结束它)
pool[oldName].kill()
pool.pop(oldName)
pool.update({name:myProcess(name, 10)})
pool[name].start()
|