吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1879|回复: 4
收起左侧

[Python 转载] pyhton3 进程(猴子搬玉米)

[复制链接]
Cool_Breeze 发表于 2021-1-19 16:44
本帖最后由 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()
                
        

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

丶优雅 发表于 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
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 20:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表