Threads and sockets

L

loial

I am writing an application to send data to a printer port(9100) and then recieve PJL responses back on that port. Because of the way PJL works I have to do both in the same process(script).

At the moment I do not start to read responses until the data has been sent to the printer. However it seems I am missing some responses from the printer whilst sending the data, so I need to be able to do the 2 things at the same time.

Can I open a port once and then use 2 different threads, one to write to the post and one to read the responses)?
 
D

Dieter Maurer

loial said:
I am writing an application to send data to a printer port(9100) and then recieve PJL responses back on that port. Because of the way PJL works I have to do both in the same process(script).

At the moment I do not start to read responses until the data has been sent to the printer. However it seems I am missing some responses from the printer whilst sending the data, so I need to be able to do the 2 things at the same time.

Can I open a port once and then use 2 different threads, one to write to the post and one to read the responses)?

That should be possible. Alternatively, you could use "asyncore" -- a
mini framework to facilitate asynchronous communication.
 
G

Grant Edwards

At the moment I do not start to read responses until the data has
been sent to the printer. However it seems I am missing some
responses from the printer whilst sending the data, so I need to be
able to do the 2 things at the same time.

Can I open a port once and then use 2 different threads, one to write
to the post and one to read the responses)?

By "port" I assume you mean a TCP connection using the 'socket' module?

If so, then yes you can write using one thread and read using a
second thread. I do that all the time.

Sometimes it's simpler to use a single thread that uses select or
poll, and sometimes it's simpler to use multiple threads. And you
never know which way is best until you're half way down the wrong
road...
 
U

Ulrich Eckhardt

Am 10.08.2012 15:01, schrieb loial:
I am writing an application to send data to a printer port(9100) and
then recieve PJL responses back on that port. Because of the way PJL
works I have to do both in the same process(script).

If I understand that right, you are opening a TCP connection, so
obviously this must be done in the same process, regardless of what PJL
(whatever that exactly is) does.

At the moment I do not start to read responses until the data has
been sent to the printer. However it seems I am missing some
responses from the printer whilst sending the data, so I need to be
able to do the 2 things at the same time.

Using TCP, that shouldn't happen, so I really wonder what exactly you
are doing here.

Can I open a port once and then use 2 different threads, one to write
to the post and one to read the responses)?

Yes, definitely, take a look at the select() function of the select
module. This basically looks like this:

(r, w, x) = select(...)
if r:
# read and handle incoming data
...
if w:
# write pending output data
...
if x:
# handle connection failure
...


If all this is not what you are doing and what you want (which I'm not
100% sure of) then please elaborate a bit what you're doing and what
kind of connection you are using.

Happy hacking!

Uli
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,965
Messages
2,570,148
Members
46,710
Latest member
FredricRen

Latest Threads

Top