博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python中进程无法结束的处理办法
阅读量:4955 次
发布时间:2019-06-12

本文共 1924 字,大约阅读时间需要 6 分钟。

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\n"
    print "success\n"

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')

转载于:https://www.cnblogs.com/chengxuyuandashu/p/3716030.html

你可能感兴趣的文章
译:面试投行的20个Java问题
查看>>
综合练习:词频统计
查看>>
BZOJ1026: [SCOI2009]windy数
查看>>
ASP.NET应用程序和ASP.NET网站所共有的文件: App_Browsers 等
查看>>
ASP.NET杂货店实战视频 VS2010+SQL2008 三层架构设计开发讲解
查看>>
样板操作数
查看>>
64位UBUNTU下安装adobe reader后无法启动
查看>>
动态缓存技术之CSI,SSI,ESI
查看>>
mac 上将.pem文件转为.pub文件
查看>>
整理下心情
查看>>
iTextSharp带中文转换出来的PDF文档显示乱码
查看>>
阶乘因式分解(一)
查看>>
qt学习记录-----3.信号与槽的问题
查看>>
『ORACLE』 内置约束(11g)
查看>>
Vue--学习过程中遇到的坑
查看>>
组件:slot插槽
查看>>
.net压缩图片质量(附demo)
查看>>
equals和==的区别
查看>>
Android6.0指纹识别开发
查看>>
java反射机制剖析(二)— Class Loader
查看>>