Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #40951 > unrolled thread

http://stackoverflow.com/questions/15311450/my-chat-client-freezes-up-after-beginning-threads

Started byOwatch <charles.xrandolph2@gmail.com>
First post2013-03-09 07:26 -0800
Last post2013-03-09 13:23 -0800
Articles 3 — 2 participants

Back to article view | Back to comp.lang.python


Contents

  http://stackoverflow.com/questions/15311450/my-chat-client-freezes-up-after-beginning-threads Owatch <charles.xrandolph2@gmail.com> - 2013-03-09 07:26 -0800
    Re: http://stackoverflow.com/questions/15311450/my-chat-client-freezes-up-after-beginning-threads Andrew Berg <bahamutzero8825@gmail.com> - 2013-03-09 10:35 -0600
      Re: http://stackoverflow.com/questions/15311450/my-chat-client-freezes-up-after-beginning-threads Owatch <charles.xrandolph2@gmail.com> - 2013-03-09 13:23 -0800

#40951 — http://stackoverflow.com/questions/15311450/my-chat-client-freezes-up-after-beginning-threads

FromOwatch <charles.xrandolph2@gmail.com>
Date2013-03-09 07:26 -0800
Subjecthttp://stackoverflow.com/questions/15311450/my-chat-client-freezes-up-after-beginning-threads
Message-ID<f9f28b67-cf81-4d9e-96fd-fe4e75fb8c9c@googlegroups.com>
I made a better chat client following help from people:

They told me that if I didn't want to be blocked on .recv when waiting for messages,          I would need to use threads, classes, functions, and queues to do so. 

So I followed some help a specific person gave me where I created a thread from a class and then defined a function that was supposed to read incoming messages and print them. 

I also created a function that allows you to enter stuff to be sent off. 

Thing is, when I run the program. Nothing happens. 

Can somebody help point out what is wrong? (I've asked questions and researched for 3 days, without getting anywhere, so I did try)



    from socket import *
    import threading
    import json
    import select
    
    print("Client Version 3")
    HOST = input("Connect to: ")
    PORT = int(input("On port: "))
    # Create Socket
    
    s = socket(AF_INET,SOCK_STREAM)
    s.connect((HOST,PORT))
    print("Connected to: ",HOST,)
    
    #-------------------Need 2 threads for handling incoming and outgoing messages--
    
    #       1: Create out_buffer:
    Buffer = []
    
    rlist,wlist,xlist = select.select([s],Buffer,[])
    
    class Incoming(threading.Thread):
        # made a function a thread
        def Incoming_messages():
            while True:
                for i in rlist:
                    data = i.recv(1024)
                    if data:
                        print(data.decode())
    
    # Now for outgoing data.
    def Outgoing():
        while True:
            user_input=("Your message: ")
            if user_input is True:
                Buffer += [user_input.encode()]
            for i in wlist:
                s.sendall(Buffer)
                Buffer = []


Thanks for taking a look, thanks also to Tony The Lion for suggesting this

If the code isnt done right, here's a link to view it, and download:

View: http://i1267.photobucket.com/albums/jj554/owatch/PPP_zps4beb891b.png
Download: http://www.mediafire.com/?u51a9b5axfffoxl

[toc] | [next] | [standalone]


#40957

FromAndrew Berg <bahamutzero8825@gmail.com>
Date2013-03-09 10:35 -0600
Message-ID<mailman.3132.1362846957.2939.python-list@python.org>
In reply to#40951
On 2013.03.09 09:26, Owatch wrote:
> Thing is, when I run the program. Nothing happens. 
> 
> Can somebody help point out what is wrong? (I've asked questions and researched for 3 days, without getting anywhere, so I did try)
You defined a thread, but never created or started it. Also, why did you
subclass threading.Thread? You also mentioned queues, but you didn't use
them.

Not tested, but shows the basics:

import threading
import queue
import socket

def process():
  while alive:
    thing = things_to_process.get()
    # do stuff with the thing here
    things_to_process.task_done()

alive = True
host = 'localhost'
port = 9999
things_to_process = queue.Queue()
process_thread = threading.Thread(target=process)
process_thread.start()
sock = socket.socket()
sock.connect((host, port))
while alive:
  try:
    data = sock.recv()
  except Exception: # should probably do different things for different
errors in real code
    alive = False
    sock.close()
    process_thread.join()
    raise
  else:
    things_to_process.put(data)

-- 
CPython 3.3.0 | Windows NT 6.2.9200 / FreeBSD 9.1

[toc] | [prev] | [next] | [standalone]


#40978

FromOwatch <charles.xrandolph2@gmail.com>
Date2013-03-09 13:23 -0800
Message-ID<e2ebed26-1a9b-4b93-bd82-cce7837c9fdb@j9g2000vbz.googlegroups.com>
In reply to#40957
On Mar 9, 6:35 pm, Andrew Berg <bahamutzero8...@gmail.com> wrote:
> On 2013.03.09 09:26, Owatch wrote:> Thing is, when I run the program. Nothing happens.
>
> > Can somebody help point out what is wrong? (I've asked questions and researched for 3 days, without getting anywhere, so I did try)
>
> You defined a thread, but never created or started it. Also, why did you
> subclass threading.Thread? You also mentioned queues, but you didn't use
> them.
>
> Not tested, but shows the basics:
>
> import threading
> import queue
> import socket
>
> def process():
>   while alive:
>     thing = things_to_process.get()
>     # do stuff with the thing here
>     things_to_process.task_done()
>
> alive = True
> host = 'localhost'
> port = 9999
> things_to_process = queue.Queue()
> process_thread = threading.Thread(target=process)
> process_thread.start()
> sock = socket.socket()
> sock.connect((host, port))
> while alive:
>   try:
>     data = sock.recv()
>   except Exception: # should probably do different things for different
> errors in real code
>     alive = False
>     sock.close()
>     process_thread.join()
>     raise
>   else:
>     things_to_process.put(data)
>
> --
> CPython 3.3.0 | Windows NT 6.2.9200 / FreeBSD 9.1

Thanks.

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.python


csiph-web