Cool_Breeze 发表于 2021-1-19 16:44

pyhton3 进程(猴子搬玉米)

本帖最后由 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 秒后停止


# 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.is_alive():
                print('****************************')
                print(f'程序 {name} 正在运行中...')
                print('****************************')
            else:
                pool.pop(name)
                pool.update({name:myProcess(name, 10)})
                pool.start()
      
      elif name == 'q': break # 退出主程序
      
      else:
            if len(pool) == 1: # 检查是否有一个进程在运行(有就结束它)
                oldName = list(pool.keys())
                if pool.is_alive(): # 检查进程是否存活(存活结束它)
                  pool.kill()
                  pool.pop(oldName)
               
            pool.update({name:myProcess(name, 10)})
            pool.start()
               
      

丶优雅 发表于 2021-1-19 16:52

我觉得 我喝完酒之后 然后在看你代码 就可以告诉你怎么做。 但是我清醒的时候感觉 就有点困难

Cool_Breeze 发表于 2021-1-19 17:21

丶优雅 发表于 2021-1-19 16:52
我觉得 我喝完酒之后 然后在看你代码 就可以告诉你怎么做。 但是我清醒的时候感觉 就有点困难

给老哥看困了,我的我的!

xjshuaishuai 发表于 2021-1-19 18:12

学习了,谢谢楼主!

fanvalen 发表于 2021-1-20 00:27

有点混乱,前段时间我也写了多任务的需求没写那么复杂,需要看我贴就ok
页: [1]
查看完整版本: pyhton3 进程(猴子搬玉米)