Reputation: 11251
I am writing peer-to-peer UDP connection and come up with decision to use separate threads for input and output:
import socket
import thread
def wait_response(s):
while True:
data, addr = s.recvfrom(1024)
if data:
data = data.decode('utf-8')
print("Received from server: " + data)
def main():
host = ''
port = 5000
server = (my_ipv4, 6000)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((host, port))
d = thread.start_new_thread(wait_response(s))
d.setDaemon(True)
d.start()
message = input("->")
while message != 'q':
s.sendto(message.encode('utf-8'), server)
message = input("->")
s.close()
if __name__ == '__main__':
main()
It worked somehow before multi-threading, so my question is only about concurrency: why I don't see execution of message = input("->")
in my console?
Upvotes: 0
Views: 38
Reputation: 4538
Try this , maybe you should need threading
module , thread
module is for very low level works , in this such level threading
is more better:
import socket
from threading import Thread
def wait_response(s):
while True:
data, addr = s.recvfrom(1024)
if data:
data = data.decode('utf-8')
print("Received from server: " + data)
def main():
host = ''
port = 5000
server = ('', 6000)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((host, port))
d = Thread(target=wait_response, args = (s,))
d.setDaemon(True)
d.start()
message = input("->")
while message != 'q':
s.sendto(message.encode('utf-8'), server)
message = input("->")
s.close()
if __name__ == '__main__':
main()
Upvotes: 1