I tried to implement this:
parent_conn, child_conn = Pipe()
f = defer.Deferred()
f = threads.deferToThread(start_test.main_func, SCRIPT_PATH, TEMP_OUTPUT_PATH, self.output_name, child_conn)
response = parent_conn.recv()
print response //prints like: initialization done
self.transport.write(response)
response = parent_conn.recv()
print response // configuration done
self.transport.write(response)
But get the same output ie all status messages concatenated and sent at once.!
[Do we need to put some deffered/callback mechanism on parent_conn.recv() ??
as that is the call blocking the thread waiting for reading.]
Any ideas ? How is such stuff done in twisted servers??
Naman
I'm no expert with threads, but I don't see any deferToThread inOn Mon, Oct 26, 2009 at 11:44 PM, naman jain <namanvit@gmail.com> wrote:
> Hi,
>
> I have a client server model in twisted, where the server spawns a thread (
> basically a test script in python that runs for about 20 mins)
> I want to track the progress of the thread, and send the progress to the
> client back
>
> So, I write something like this in my server:
>
> parent_conn, child_conn = Pipe()
> thread = Process(target = start_test.main_func, args=(SCRIPT_PATH,
> TEMP_OUTPUT_PATH, self.output_name, child_conn))
> thread.start()
>
> response = parent_conn.recv()
> print response //prints like: initialization done
> self.transport.write(response)
>
>
> response = parent_conn.recv()
> print response // configuration done
> self.transport.write(response)
>
> .
> .
> .
>
> thread.join()
>
>
> But the transport.write calls don't send at the same time. instead they wait
> for the thread to finish (coz of thread.join) and then append all the
> response and send it back; like "initialization doneconfiguration
> done...done"
> thereby defeating the purpose of creating a thread.
>
> How do I give the control to the reactor to write the data back, and still
> keep the thread running?
> or is there any other way these kinda of progress can be tracked ?
> I am kinda stuck with this :(
there, which is what people on this list tend to mention whenever
threading comes up. Perhaps you need to switch to the "twisted way"
to create your thread?
http://twistedmatrix.com/documents/8.2.0/api/twisted.internet.threads.html
~ Nathan
_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python