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\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‘)

时间: 2024-10-25 05:36:37

Python中进程无法结束的处理办法的相关文章

使用python中出现的错误及解决办法

[问题1]在编译安装完Python后,不能正常使用yum,使用yum出现以下错误 [[email protected] bin]# yum  File "/usr/bin/yum", line 30    except KeyboardInterrupt, e:                            ^SyntaxError: invalid syntax [解决办法] 将/usr/bin/yum文件的第一行中的解释器转换回python-2.7 [[email prot

python中进程的几种创建方式

在新创建的子进程中,会把父进程的所有信息复制一份,它们之间的数据互不影响. 使用os.fork()创建 该方式只能用于Unix/Linux操作系统中,在windows不能用. import os # 注意,fork函数,只在Unix/Linux/Mac上运行,windows不可以 pid = os.fork() # 子进程永远返回0,而父进程返回子进程的ID. if pid == 0: print('子进程') else: print('父进程') 使用Process类类创建 multiproc

Python中Counter统计数据输出具体办法

from collections import Counter # 列表 l_one = [1709020621, 1709020621, 1770603107, 1770603105, 1770603106, 1770603105, 1709020621] # 把列表换成字典统计 c = Counter(l_one) print(c) k = c.most_common(len(c)) # 找出全部元素从大到小的元素频率以及对应的次数. # 转化成列表形式,列表每一项又是元祖. print(k

使用C语言为python编写动态模块(2)--解析python中的对象如何在C语言中传递并返回

楔子 编写扩展模块,需要有python源码层面的知识,我们之前介绍了python中的对象.但是对于编写扩展模块来讲还远远不够,因为里面还需要有python中模块的知识,比如:如何创建一个模块.如何初始化python环境等等.因此我们还需要了解一些前奏的知识,如果你的python基础比较好的话,那么我相信你一定能看懂,当然我们一开始只是介绍一个大概,至于细节方面我们会在真正编写扩展模块的时候会说. 关于使用C为python编写扩展模块,我前面还有一篇博客,强烈建议先去看那篇博客,对你了解Pytho

14-08-07 关于程序、进程、线程,以及python中实现多线程的办法

考核题目中涉及到多线程编程,于是复习了一下系统编程里面的各种概念. 首先,程序是代码,没有活动.通过编译连接之后被加载到内存里运行时,内存活动的就是进程,这里的进程不仅仅是代码段,还包括涉及的数据等.而线程是在同一个进程下的小程序,它们可以"同时"地运行,其中会有一个主线程来控制. 接下来是多线程或着多进程的实现,两者原理基本一样,都是把CPU的时间分片然后进行分配给某个进程或者线程,也就是说在同一个时间只会有一个线程在使用CPU,但是CPU切换线程的频率非常快使得它们看上去是在同一个

python学习进程和线程中碰到的问题以及问题解惑

python中的os.getpid() os.getpid()是获取的是当前进程的进程号,os.getppid()是获取当前进程的父进程的进程号 python 中__name__ = '__main__' 的作用 eg: def main(): print "we are in %s"%__name__ if __name__ == '__main__': main() 这个函数定义了一个main函数,我们执行一下该py文件发现结果是打印出"we are in __main_

Python 中的进程、线程、协程、同步、异步、回调(一)

一.上下文切换技术 简述 在进一步之前,让我们先回顾一下各种上下文切换技术. 不过首先说明一点术语.当我们说"上下文"的时候,指的是程序在执行中的一个状态.通常我们会用调用栈来表示这个状态--栈记载了每个调用层级执行到哪里,还有执行时的环境情况等所有有关的信息. 当我们说"上下文切换"的时候,表达的是一种从一个上下文切换到另一个上下文执行的技术.而"调度"指的是决定哪个上下文可以获得接下去的CPU时间的方法. 进程 进程是一种古老而典型的上下文系

Python 中的进程、线程、协程、同步、异步、回调

进程和线程究竟是什么东西?传统网络服务模型是如何工作的?协程和线程的关系和区别有哪些?IO过程在什么时间发生? 在刚刚结束的 PyCon2014 上海站,来自七牛云存储的 Python 高级工程师许智翔带来了关于 Python 的分享<Python中的进程.线程.协程.同步.异步.回调>. 一.上下文切换技术 简述 在进一步之前,让我们先回顾一下各种上下文切换技术. 不过首先说明一点术语.当我们说"上下文"的时候,指的是程序在执行中的一个状态.通常我们会用调用栈来表示这个状

为你揭秘 Python 中的进程、线程、协程、同步、异步、回调

进程和线程究竟是什么东西?传统网络服务模型是如何工作的?协程和线程的关系和区别有哪些?IO 过程在什么时间发生? 一.我们来介绍一下上下文切换技术 关于一些术语.当我们说"上下文"的时候,指的是程序在执行中的一个状态.通常我们会调用栈来表示这个状态.栈--记载了每个调用层级执行了哪里和执行时的环境情况等所有有关的信息. 当我们说"上下文切换"的时候,表达的是一种从一个上下文切换到另一个上下文执行的技术.而"调度"指的是决定哪个上下文可以获得接下来