sj*******@yahoo.com wrote:
On May 16, 11:40 am, Roger Heathcote <use...@technicalbloke.com>
wrote:<snip>
>Despite many peoples insistence that allowing for the arbitrary killing of threads is a cardinal sin and although I have no particular threading problem to crack right now I remain interest in the taboo that is thread killing. The real world and it's data are messy and imperfect and I can
<snip>
In general, use processes when you can and threads only when you
must. OS designers spent a lot of energy implementing protected
memory, no sense throwing out a fair chunk of that hard work unless
you actually need to.
Fair point, but for sub processes that need to be in close contact with
the original app, or very small functions that you'd like 100s or 1000s
of it seems like a kludge having to spawn whole new processes build in
socket communications and kill via explicit OS calls. I can't see that
approach scaling particularly well but I guess there's no choice.
Does anyone think it likely that the threading module (and threading in
general) will be improved and augmented with features like timeouts and
arbitrary threadicide in the next year or two? Seems there's little
scope for tapping the power of the current generation of multiple cores
with the current pythons, tho I appreciate breakneck speed has never
been a design objective it looks like multicore is set to be the next
generation PC architecture.
Roger Heathcote - technicalbloke.com 6 1881
On Mon, May 19, 2008 at 11:36 AM, Roger Heathcote
<us****@technicalbloke.comwrote:
sj*******@yahoo.com wrote:
>> On May 16, 11:40 am, Roger Heathcote <use...@technicalbloke.com> wrote:<snip>
>>> Despite many peoples insistence that allowing for the arbitrary killing of threads is a cardinal sin and although I have no particular threading problem to crack right now I remain interest in the taboo that is thread killing. The real world and it's data are messy and imperfect and I can
<snip>
>> In general, use processes when you can and threads only when you must. OS designers spent a lot of energy implementing protected memory, no sense throwing out a fair chunk of that hard work unless you actually need to.
Fair point, but for sub processes that need to be in close contact with the
original app, or very small functions that you'd like 100s or 1000s of it
seems like a kludge having to spawn whole new processes build in socket
communications and kill via explicit OS calls. I can't see that approach
scaling particularly well but I guess there's no choice.
It's not a kludge - the whole reason why killing a thread is undefined
and a "cardinal sin" is because it's in your own address space and you
can't guarantee anything about how it left things when you killed it.
You simply can't have it both ways. If you want to be able to safely
and sanely kill an uncooperative thread (*especially* third party code
you don't control) you have to isolate it from your address space, and
this means a process. This is a fundamental problem with the entire
idea of shared-state concurrency. For the record, you can't use 1000s
of threads either - if you really need 1000s of concurrent things
running you need to re-think your concurrency model and possibly your
choice of languages and environment.
The messiness of the real world is *why* you should use processes, not
a reason to avoid them.
Does anyone think it likely that the threading module (and threading in
general) will be improved and augmented with features like timeouts and
arbitrary threadicide in the next year or two? Seems there's little scope
for tapping the power of the current generation of multiple cores with the
current pythons, tho I appreciate breakneck speed has never been a design
objective it looks like multicore is set to be the next generation PC
architecture.
They absolutely should not be. Adding an API which can't work in the
general case and is dangerous even when it can work does not do anyone
any favors.
Roger Heathcote - technicalbloke.com
-- http://mail.python.org/mailman/listinfo/python-list
How is it that you recommend killing a pure python thread? And also,
when i use the 'threading' module am I creating a process, or a (gasp)
thread? (Is this an obvious question - and if so, how does one create
a 'process'?)
Thanks!
blaine <fr*****@gmail.comwrites:
How is it that you recommend killing a pure python thread? And also,
when i use the 'threading' module am I creating a process, or a (gasp)
thread?
A thread.
(Is this an obvious question - and if so, how does one create
a 'process'?)
os.fork()
En Mon, 19 May 2008 20:07:06 -0300, Paul Rubin
<"http://phr.cx"@NOSPAM.invalidescribió:
blaine <fr*****@gmail.comwrites:
>How is it that you recommend killing a pure python thread?
Make the thread cooperate. It should periodically check some variable or
condition, and cleanly exit when requested.
>And also, when i use the 'threading' module am I creating a process, or a (gasp) thread?
A thread.
>(Is this an obvious question - and if so, how does one create a 'process'?)
os.fork()
A more portable answer: using the subprocess module.
--
Gabriel Genellina
On May 19, 8:16 pm, "Gabriel Genellina" <gagsl-...@yahoo.com.ar>
wrote:
En Mon, 19 May 2008 20:07:06 -0300, Paul Rubin
<"http://phr.cx"@NOSPAM.invalidescribió:
blaine <frik...@gmail.comwrites:
How is it that you recommend killing a pure python thread?
Make the thread cooperate. It should periodically check some variable or
condition, and cleanly exit when requested.
And also,
when i use the 'threading' module am I creating a process, or a (gasp)
thread?
A thread.
(Is this an obvious question - and if so, how does one create
a 'process'?)
os.fork()
A more portable answer: using the subprocess module.
--
Gabriel Genellina
Thanks for the info. The problem that I'm having is that I get a
thread stuck blocking - waiting for a return from a FIFO (made with
os.mkfifo()).
Blaine
On May 19, 11:31 am, "Chris Mellon" <arka...@gmail.comwrote:
On Mon, May 19, 2008 at 11:36 AM, Roger Heathcote
Fair point, but for sub processes that need to be in close contact with the
original app, or very small functions that you'd like 100s or 1000s of it
seems like a kludge having to spawn whole new processes build in socket
communications and kill via explicit OS calls. I can't see that approach
scaling particularly well but I guess there's no choice.
It's not a kludge - the whole reason why killing a thread is undefined
and a "cardinal sin" is because it's in your own address space and you
can't guarantee anything about how it left things when you killed it.
You simply can't have it both ways. If you want to be able to safely
and sanely kill an uncooperative thread (*especially* third party code
you don't control) you have to isolate it from your address space, and
this means a process. This is a fundamental problem with the entire
idea of shared-state concurrency. For the record, you can't use 1000s
of threads either - if you really need 1000s of concurrent things
running you need to re-think your concurrency model and possibly your
choice of languages and environment.
Strictly speaking, you CAN use 1000s of threads, but it requires some
special effort.
It's not a good idea though, at least for the near future. If you
want to kill a thread you have to do it cooperatively, and for the
effort required to get that right you might as well make the whole
thing event-driven.
The messiness of the real world is *why* you should use processes, not
a reason to avoid them.
Does anyone think it likely that the threading module (and threading in
general) will be improved and augmented with features like timeouts and
arbitrary threadicide in the next year or two? Seems there's little scope
for tapping the power of the current generation of multiple cores with the
current pythons, tho I appreciate breakneck speed has never been a design
objective it looks like multicore is set to be the next generation PC
architecture.
They absolutely should not be. Adding an API which can't work in the
general case and is dangerous even when it can work does not do anyone
any favors.
I agree, if it's not safe there's no point adding it.
However, if you change the parameters a little bit.. it's quite
possible to redefine many blocking functions as cooperative
cancellation points. This is the approach I take with python-
safethread, and it should satisfy most purposes. This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: Fabiano Sidler |
last post by:
Hello Newsgroup!
In my Python script, I use the 'thread' module (not 'threading') and
'signal' simultaneously. All spawned threads execute
'pcapObject.loop(-1, callback)', which does not return....
|
by: djw |
last post by:
Hi, Folks-
I have a question regarding the "proper" use of try: finally:... Consider
some code like this:
d = Device.open()
try:
d.someMethodThatCanRaiseError(...)
if SomeCondition:
raise...
|
by: Jacek Pop³awski |
last post by:
Hello.
I am going to write python script which will read python command from
socket, run it and return some values back to socket.
My problem is, that I need some timeout. I need to say for...
|
by: nd02tsk |
last post by:
Hello!
I have a couple of final ( I hope, for your sake ) questions regarding
PostgreSQL.
I understand PostgreSQL uses processes rather than threads. I found this
statement in the archives:
...
|
by: Hans |
last post by:
Hi all,
Is there a way that the program that created and started a thread also stops
it.
(My usage is a time-out).
E.g.
thread = threading.Thread(target=Loop.testLoop)
thread.start() ...
|
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...
|
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...
|
by: BlueBird |
last post by:
Hi,
I have a program with a master thread and several slave threads.
Whenever an exception occurs, in the master thread or in one of the
slave threads, I would like to interrupt all the...
|
by: dmitrey |
last post by:
hi all,
Is there a better way to kill threading.Thread (running) instance than
this one
http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/496960
(it's all I have found via google).
BTW,...
|
by: DolphinDB |
last post by:
The formulas of 101 quantitative trading alphas used by WorldQuant were presented in the paper 101 Formulaic Alphas. However, some formulas are complex, leading to challenges in calculation.
Take...
|
by: Aftab Ahmad |
last post by:
So, I have written a code for a cmd called "Send WhatsApp Message" to open and send WhatsApp messaage. The code is given below.
Dim IE As Object
Set IE =...
|
by: ryjfgjl |
last post by:
ExcelToDatabase: batch import excel into database automatically...
|
by: isladogs |
last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM).
In this month's session, we are pleased to welcome back...
|
by: marcoviolo |
last post by:
Dear all,
I would like to implement on my worksheet an vlookup dynamic , that consider a change of pivot excel via win32com, from an external excel (without open it) and save the new file into a...
|
by: Vimpel783 |
last post by:
Hello!
Guys, I found this code on the Internet, but I need to modify it a little. It works well, the problem is this: Data is sent from only one cell, in this case B5, but it is necessary that data...
|
by: jfyes |
last post by:
As a hardware engineer, after seeing that CEIWEI recently released a new tool for Modbus RTU Over TCP/UDP filtering and monitoring, I actively went to its official website to take a look. It turned...
|
by: ArrayDB |
last post by:
The error message I've encountered is; ERROR:root:Error generating model response: exception: access violation writing 0x0000000000005140, which seems to be indicative of an access violation...
|
by: PapaRatzi |
last post by:
Hello,
I am teaching myself MS Access forms design and Visual Basic. I've created a table to capture a list of Top 30 singles and forms to capture new entries. The final step is a form (unbound)...
| |