• Python中进程无法结束的处理办法


    1.方法一    http://hi.baidu.com/javalang/item/72fabf2359a30b464799625e

    也就是说当线程使用start方法运行起来后,只有当run方法运行结束,一个线程才会结束。

    import threading
    from threading import Thread
    import time
    class MyThread(Thread):
        over=False
        def __init__(self):
            Thread.__init__(self)

        def run(self):
            while not self.over:
                print "hello"
                time.sleep(2)
        def kill(self):
            self.over=True


    if __name__=='__main__':
        t=MyThread()
        t.start()
        print 'wait 5s'
        time.sleep(5)
        t.kill()

    该方法适合run()方法中不包含死循环程序,若run()包含死循环,则此方法无法结束该线程

    2.方法二

    import threading
    import thread
    import time
    import os
    import urllib

    def timer():
        time_start = time.time()
        while(1):
        time_end = time.time()
        if ((time_end - time_start) > 4):
            return 1

    def printf():
        i = 0
        while(1):
            i = i + 1
            print i
            time.sleep(1)

    def run():
        sub_thread1 = thread.start_new_thread(printf,())
        try:
        if(timer()):
            sub_thread1.exit()
        except AttributeError:
            pass
        print "stop "
        print "success "

    if __name__=='__main__':
        run()

    开一个线程,该线程为死循环,则使用Thread类的exit方法可以退出,一般情况建议使用Thread.threading

    若子线程触发了一个新的进程,则此方法无效,需使用父进程杀死该子进程

    方法三:

    import threading
    import thread
    import time
    import os
    import urllib

    def timer():
        time_start = time.time()
        while(1):
        time_end = time.time()
        if ((time_end - time_start) > 10):
            return 1

    def printf():
        i = 0
        while(1):
            i = i + 1
            print i
            time.sleep(1)
            #if(i > 15):
            # break

    def run(filename):
        sub_thread = thread.start_new_thread(os.system,('java -jar'+' '+ filename,))
        try:
            if(timer()):
            sub_thread.exit()
            except AttributeError:
                pass
            tasks = os.popen('jps -m').readlines()
            #print tasks
             found_task = ""
             PID_end_position = 0
             for task in tasks:
                 if filename[3:] in task:
                     found_task = task
                     PID_end_position = found_task.find(filename[3:]) - 1
                     break
                 if found_task:
                 PID = found_task[0 : PID_end_position]
                 os.system("taskkill /f /PID " + PID)
                 time.sleep(3)
                 os.system('del /f'+' '+filename)

    if __name__=='__main__':
                run('D:\ba-finance-tuangou-bp-job-1.0.1-SNAPSHOT.jar')

  • 相关阅读:
    类的高内聚低耦合
    面向对象是三个特征:封装、继承、多态
    抽象类和接口
    remoting和webservice
    装箱和拆箱
    数据库
    遍历TextBox控件
    索引类型
    .NET和C#有什么区别
    三层架构
  • 原文地址:https://www.cnblogs.com/chengxuyuandashu/p/3716030.html
Copyright © 2020-2023  润新知