Rudziankoŭ
Rudziankoŭ

Reputation: 11251

Threading issue in Python

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

Answers (1)

ᴀʀᴍᴀɴ
ᴀʀᴍᴀɴ

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

Related Questions