max time threads

pacopyc pacopyc at gmail.com
Fri Jun 18 17:45:40 EDT 2010


On 18 Giu, 01:04, MRAB <pyt... at mrabarnett.plus.com> wrote:
> pacopyc wrote:
> > Hi, I'm trying to work with threads and I need your help. This is
> > code:
>
> > from threading import Thread
> > from Queue import Queue
> > import time
> > import random
>
> > def test_fun (k,q,t):
> >     time.sleep(t)
> >     print "hello world from thread " + str(q.get()) + " (sleep time =
> > " + str(t) + " sec.)"
> >     q.task_done()
>
> > queue = Queue()
> > for i in range (1,10):
> >     queue.put(i)
> > for j in range(queue.qsize()):
> >     num = random.randint(1,30)
> >     worker = Thread(target=test_fun, args=(j,queue,num))
> >     worker.setDaemon(True)
> >     worker.start()
> > queue.join()
>
> > Execution:
>
> > hello world from thread 1 (sleep time = 5 sec.)
> > hello world from thread 2 (sleep time = 5 sec.)
> > hello world from thread 3 (sleep time = 6 sec.)
> > hello world from thread 4 (sleep time = 8 sec.)
> > hello world from thread 5 (sleep time = 10 sec.)
> > hello world from thread 6 (sleep time = 13 sec.)
> > hello world from thread 7 (sleep time = 18 sec.)
> > hello world from thread 8 (sleep time = 19 sec.)
> > hello world from thread 9 (sleep time = 20 sec.)
>
> > Some questions for you:
>
> > 1) Why order is always the same (thread 1, thread 2, thread 3 ....
> > thread 9) and also seconds are always increasing? I don't understand.
> > 2) I'd like to decide a max time for each thread. If max time = 7 sec.
> > I want to print only threads with sleep time <= 7 sec. How can I do?
> > Can you modify my code?
>
> > Thank you very much
>
> 1)
>
> First it puts the numbers 1..9 into 'queue', then it starts 9 threads,
> giving each a number 'num'.
>
> Each thread waits for 'num' seconds ('t' in the thread).
>
> The thread with the lowest value of 'num' wakes first, gets the first
> entry from 'queue' (the value 1), and therefore prints "thread 1".
>
> The thread with the second-lowest value of 'num' wakes next, gets the
> second entry from 'queue' (the value 2), and therefore prints "thread
> 2".
>
> And so on.
>
> 2)
>
> If a thread is given a value of 'num' of more than a maximum, that
> thread shouldn't print its output, but it should still get the entry
> from the queue (assuming that you want it to still behave the same
> otherwise).

Ok, the problem is that I want fix a time max for each thread. For
example run 10 threads (each can terminate its work in 10 sec. max
fixed time) and wait them. If they finish its work in < 10 sec. (for
example 2 sec.) very good ... go on immediately (don't wait
unnecessary time), but if a thread use more than 10 sec. stop wait (I
kill it) .... when all threads have finished their work or when they
have used all their available time (10 sec.) the program must go on
(don't wait).



More information about the Python-list mailing list