python's threading has no "interrupt"?
Jay O'Connor
joconnor at cybermesa.com
Tue Dec 2 10:48:41 EST 2003
Dave Brueck wrote:
>What's your actual use case (IOW, what programming problem are you trying to
>solve)? Maybe there is a Python solution that will work for you, but in order
>to help you find it, people here will need to better understand what you're
>trying to do.
>
>You've noticed that there isn't an identical construct for what you were doing
>in Java, so it may be that the Python way will be a completely different
>approach to the problem rather than just a direct conversion from Java to
>Python syntax.
>
>
Well, I'll give an example from something I tried to do a few years ago
which I couldn't translate to Python, though I took a stab at it.
The language in question was a VM language with it's own internal
process model. The process model was all inteneral to on eOS process to
it was a cooperative model of multi-threading
The application I wrote was a web server on the front of an application
so that web requests were all handled in the application. IOW, the
application had a web server interface)
The language process model had both the ability to set process
priorities, as well as allow processes to sleep and cede control to
other processes.
When a web request would come in, the handling of the request would be
forked as a seperate process so that the server could accept the next
request. Both the server process and the handling process(es) were at
the same priority level so in theory each process would run to
completion before allowing another process to run. For this reason,
both the server process and the handling processes would issue a 'yield'
at periodic strategic points, allowing themselves to temporarily halt
and for the next process of equal priority that was waiting to run.
This allowed both the server to remain responsive and all handling
processes to run efficiently.
Behind all of this was a higher priority process running, but it
basically would sleep for several minutes (sleeping allowed lower
priority process, like the server process to run). When the background
process would wake up, since it was a higher priority, it would
immediately take control. It's main job was to check the list of
handling processes for any that had been running too long (long running
processes in a web server meant that something had gone wrong) and
terminate them (freeing up the process and socket resources, etc..).
Then it (the cleanup process) would go back to sleep and let the lower
priority processes run.
At one point I attempted to translate this all into Python, but the lack
of the ability to set process priorities, or for processes to yield
control to other processes, or an effective way to terminate proceses,
kept me from doing this. The Python threading model seemed very
primitve compared to what I was used to in regards to how threads can be
controlled.
Rather than being a knock on Python, I would prefer to know how to do
all this, if it can be done.
More information about the Python-list
mailing list