Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #40951 > unrolled thread
| Started by | Owatch <charles.xrandolph2@gmail.com> |
|---|---|
| First post | 2013-03-09 07:26 -0800 |
| Last post | 2013-03-09 13:23 -0800 |
| Articles | 3 — 2 participants |
Back to article view | Back to comp.lang.python
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
| From | Owatch <charles.xrandolph2@gmail.com> |
|---|---|
| Date | 2013-03-09 07:26 -0800 |
| Subject | http://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]
| From | Andrew Berg <bahamutzero8825@gmail.com> |
|---|---|
| Date | 2013-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]
| From | Owatch <charles.xrandolph2@gmail.com> |
|---|---|
| Date | 2013-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