python杀线程_使用OS杀死python线程

1586010002-jmsa.png

I've already asked similar question many times, but still can't find appropriate solution.

I have and external function, that could run in some cases very long. I want to interrupt it after, say, 30 seconds.

How do I do that?

Threads are good, but I can't stope them (i don't have access to external function's code)

Multiprocessing is also not an option, because I run site under mod_wsgi.

Are there any reliable ways to stop the thread?

Maybe using os.system or os.kill. If yes, then how?

External function only performs some caclulations, no network connections or file openings. So, I just need to stop process and clean up.

My code (actually was taken from some source):

def time_limit(timeout):

def internal(function):

def internal2(*args, **kw):

class MyThread(threading.Thread):

def __init__(self):

threading.Thread.__init__(self)

self.result = None

self.error = None

def run(self):

try:

self.result = function(*args, **kw) # this is external

except Exception as e:

self.error = e

def _stop(self):

if self.isAlive():

threading.Thread._Thread__stop(self)

c = MyThread()

c.start()

c.join(timeout)

counter = 0

if c.isAlive():

c._stop()

raise TimeoutException

if c.error:

raise c.error

return c.result

return internal2

return internal

解决方案

You can't kill thread, but you can kill a process. If you can use processes instead threads, you can use multithreading module. Process can be terminated from parent application.

If you describe your task in more detail, maybe I can help more.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值