473,813 Members | 3,808 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

kill thread

Hi,

I have a threading.Threa d class with a "for i in range(1,50)" loop
within. When it runs and I do ^C, I have the error [1] as many as
loops. I would like to catch this exception (and if possible do some
cleanup like in C pthreads) so the program finishes cleanly. Where and
how can I do this ? in __run__ ? __init__ ? a try/except stuff ?

Thanks,
Mathieu

[1]:
^CException in thread Thread-1:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framewor k/Versions/2.5/lib/python2.5/threading.py",
line 486, in __bootstrap_inn er
self.run()
File "./youfetch.py", line 148, in run
self.getids()
File "./youfetch.py", line 145, in getids
self.ids.append (self.getidsatp age(i))
File "./youfetch.py", line 138, in getidsatpage
self.child = subprocess.Pope n(cmd.split(),s tdout=subproces s.PIPE)
File "/Library/Frameworks/Python.framewor k/Versions/2.5/lib/python2.5/subprocess.py",
line 594, in __init__
errread, errwrite)
File "/Library/Frameworks/Python.framewor k/Versions/2.5/lib/python2.5/subprocess.py",
line 1011, in _execute_child
self.pid = os.fork()
KeyboardInterru pt
Aug 7 '08 #1
4 2377
Hello,
I have a threading.Threa d class with a "for i in range(1,50)" loop
within. When it runs and I do ^C, I have the error [1] as many as
loops. I would like to catch this exception (and if possible do some
cleanup like in C pthreads) so the program finishes cleanly. Where and
how can I do this ? in __run__ ? __init__ ? a try/except stuff ?
You can have a try/except KeyboardExcepti on around the thread code.

HTH,
--
Miki <mi*********@gm ail.com>
http://pythonwise.blogspot.com
Aug 8 '08 #2
2008/8/8 Miki <mi*********@gm ail.com>:
Hello,
>I have a threading.Threa d class with a "for i in range(1,50)" loop
within. When it runs and I do ^C, I have the error [1] as many as
loops. I would like to catch this exception (and if possible do some
cleanup like in C pthreads) so the program finishes cleanly. Where and
how can I do this ? in __run__ ? __init__ ? a try/except stuff ?
You can have a try/except KeyboardExcepti on around the thread code.

HTH,
--
Miki
Of course, but I don't know where. I placed this inside loop, within
called functions from the loop, I still have the problem.

Mathieu
Aug 8 '08 #3
On 8 Ago, 10:03, "Mathieu Prevot" <mathieu.pre... @ens.frwrote:
2008/8/8 Miki <miki.teb...@gm ail.com>:
Hello,
I have a threading.Threa d class with a "for i in range(1,50)" loop
within. When it runs and I do ^C, I have the error [1] as many as
loops. I would like to catch this exception (and if possible do some
cleanup like in C pthreads) so the program finishes cleanly. Where and
how can I do this ? in __run__ ? __init__ ? a try/except stuff ?
You can have a try/except KeyboardExcepti on around the thread code.
HTH,
--
Miki

Of course, but I don't know where. I placed this inside loop, within
called functions from the loop, I still have the problem.

Mathieu
Try this:

loop_completed = True
for i in range(1,50):
try:
# your code here
except KeyboardExcepti on:
loop_completed = False
break # this breaks the loop
# end loop
if loop_completed:
# code to be executed in case of normal completion
else:
# code to be executed in case of interruption
# code to be executed in both cases
Aug 8 '08 #4
2008/8/8 <bo*****@virgil io.it>:
On 8 Ago, 10:03, "Mathieu Prevot" <mathieu.pre... @ens.frwrote:
>2008/8/8 Miki <miki.teb...@gm ail.com>:
Hello,
>I have a threading.Threa d class with a "for i in range(1,50)" loop
within. When it runs and I do ^C, I have the error [1] as many as
loops. I would like to catch this exception (and if possible do some
cleanup like in C pthreads) so the program finishes cleanly. Where and
how can I do this ? in __run__ ? __init__ ? a try/except stuff ?
You can have a try/except KeyboardExcepti on around the thread code.
HTH,
--
Miki

Of course, but I don't know where. I placed this inside loop, within
called functions from the loop, I still have the problem.

Mathieu

Try this:

loop_completed = True
for i in range(1,50):
try:
# your code here
except KeyboardExcepti on:
loop_completed = False
break # this breaks the loop
# end loop
if loop_completed:
# code to be executed in case of normal completion
else:
# code to be executed in case of interruption
# code to be executed in both cases
Thanks for answers. My code sheme was the following: main() starts 2
thread trees (threads of threads of ...) and some of these have "for"
loops. These loops needed to be as you recommended:

for ... :
try:
# instructions
except KeyboardInterru pt:
# cleaning instructions
break

The problem with atexit.register is that is doesn't work in case of
system signals catches (http://tinyurl.com/6kdaba)

Thanks,
Mathieu

_______________ _______________ _______________
def main():
query1 = Thread1
batch1 = Thread2
while True:
try:
#some code for updating / synchronize / etc threads
except KeyboardInterru pt:
try:
query1.terminat e()
batch1.terminat e()
except:
pass
finally:
break
_______________ _______________ _______________
I used also from http://sebulba.wikispaces.com/recipe+thread2
the following new Thread class:

_______________ _______________ _______________
import threading, inspect, ctypes

def _async_raise(ti d, exctype):
"""raises the exception, performs cleanup if needed"""
if not inspect.isclass (exctype):
raise TypeError("Only types can be raised (not instances)")
res = ctypes.pythonap i.PyThreadState _SetAsyncExc(ti d,
ctypes.py_objec t(exctype))
if res == 0:
raise ValueError("inv alid thread id")
elif res != 1:
# """if it returns a number greater than one, you're in trouble,
# and you should call it again with exc=NULL to revert the effect"""
ctypes.pythonap i.PyThreadState _SetAsyncExc(ti d, 0)
raise SystemError("Py ThreadState_Set AsyncExc failed")

class Thread(threadin g.Thread):
def _get_my_tid(sel f):
"""determin es this (self's) thread id"""
if not self.isAlive():
raise threading.Threa dError("the thread is not active")

# do we have it cached?
if hasattr(self, "_thread_id "):
return self._thread_id

# no, look for it in the _active dict
for tid, tobj in threading._acti ve.items():
if tobj is self:
self._thread_id = tid
return tid

raise AssertionError( "could not determine the thread's id")

def raise_exc(self, exctype):
"""raises the given exception type in the context of this thread"""
_async_raise(se lf._get_my_tid( ), exctype)

def terminate(self) :
"""raises SystemExit in the context of the given thread, which should
cause the thread to exit silently (unless caught)"""
self.raise_exc( SystemExit)
_______________ _______________ _______________
Aug 9 '08 #5

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

12
18903
by: Jerry Sievers | last post by:
Greetings Pythonists; I have limited experience with threaded apps and plenty with old style forked heavyweight multi-processing apps. Using Python 2.3.3 on a Redhat 7.x machine. Wondering if there is a simple way from a main python program to kill a running thread? I see with the 'threading' module the way daemonic threads behave when the main program finishes.
5
10941
by: Blatwurst | last post by:
I'm trying to implement a simple server in C#. I want to do the classic thing of spinning off a thread that just blocks in a Socket.Accept() call until a request comes in. At that point, the Accept() returns, the thread spins off another thread to handle the request, and then calls Accept() again. This all works fine except that I can find no way to kill the thread that is blocked in the Accept() call when I want to shut down the server. ...
6
42879
by: RickDee | last post by:
Understand that when I start a thread, a number will be generated and is able to get from GetHashCode method. But I would like to use this number when I want to kill certain thread, anybody know how ?? Thanks Regards
3
5860
by: Stewart | last post by:
Hey Group, Hoping someone can help me out. I have some code which starts up some asynchronous code using a delegate. The code is below. Basically my main code (not shown) calls ServerThreadStart.StartServer to start the server running asynchronously. This works fine. Shouldn't be any problems here. My question is how can I get my code to kill this code running asynchronously? There is a dlgtServer.Remove(Delegate, Delegate)
9
15288
by: Brett | last post by:
I'm trying to kill a thread spawned this way: Form1 spawns Class1 via Thread.start() Here's my code to kill the thread: If (t.ThreadState.ToString = "SuspendedRequested, WaitSleepJoin") Or (t.ThreadState.ToString = "Suspended") Or (t.ThreadState.ToString = "WaitSleepJoin, Suspended") Then Else t.Abort()
2
3509
by: Christopher Carnahan | last post by:
I need to figure out how to terminate a thread while it is blocked trying to create a COM object via interop. In a worker thread, I do something like this: Type t = null; Object activatedObject = null; Legacy.IScheduled comObject = null; t = Type.GetTypeFromProgID(ProgID);
5
10605
by: care02 | last post by:
Hi! I have the following problem: I have written a short Python server that creates an indefinite simulation thread that I want to kill when quitting (Ctrl-C) from Python. Googling around has not given me any hints on how to cleanly kill running threads before exiting. Any help is appreciated! Carl
18
10247
by: =?Utf-8?B?VGhlU2lsdmVySGFtbWVy?= | last post by:
Because C# has no native SSH class, I am using SharpSSH. Sometimes, for reasons I do not know, a Connect call will totally lock up the thread and never return. I am sure it has something to do with weirdness going on with the server I am talking to. Anyhow, this locked up state happens once in a while (maybe once per day) and I can't figure out how to deal with the locked up thread. If I issue a Thread.Abort() the exception never...
20
5106
by: =?ISO-8859-1?Q?Gerhard_H=E4ring?= | last post by:
John Dohn wrote: When I do this, I put a special value in the queue (like None) and in the worker thread, check for the special value and exit if found. Threads can also be marked as "daemon threads" (see docs for threading.Thread objects). This will make the application terminate if only "daemon threads" are left. So best would probably be soemthing like
1
10394
by: =?Utf-8?B?QWxoYW1icmEgRWlkb3MgS2lxdWVuZXQ=?= | last post by:
Hi misters, Is it possible "kill" the thread of Backgroundworker ? In my Dowork event, I have NOT While for do e.Cancel = true, only have a call to external COM. If I want cancel, calling CancelAsync, not cancels the call to COM. How I can do it , please ? Any suggestions will be very appreciated.
0
9607
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it. First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
0
10667
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
0
10407
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth. The Art of Business Website Design Your website is...
0
10139
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
1
7681
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
6897
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert into image. Globals.ThisAddIn.Application.ActiveDocument.Select();...
0
5568
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols. I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
1
4358
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
2
3885
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.