Я недавно работал над программой (как вы можете видеть из моего предыдущего вопроса), и у меня возникли проблемы с пониманием и реализацией многопоточности.Многопоточность в python - Блокировка вызова в фоновом режиме
Я следил за учебником (binary tides) для настройки UDP-сервера, который отлично работает. Тем не менее, проблема заключается в том, что когда я создаю блокирующий UDP-сокет в новом потоке, код, который у меня есть в моей основной программе, где я изначально создал поток, не работает. Вот некоторые из моего кода:
main.py:
from thread import*
import connections
start_new_thread(networkStart.startConnecton())
print 'This should print!'
networkStart.py:
def startConnecton():
userData.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket created'
try:
userData.s.bind((HOST, PORT))
except socket.error, msg:
print 'Bind failed. Error code: ' +str(msg[0]) + 'Message' +msg[1]
sys.exit()
print 'Socket bind complete'
userData.s.listen(10)
# Set the socket to listening mode, if there are more than 10 connections waiting reject the rest
print 'Socket now listening'
#Function for handling connections. Each new connection is handled on a separate thread
start_new_thread(connections.connectionListen())
connections.py:
def connectionListen():
while 1:
print 'waiting for connection'
#wait to accept a connection - blocking call
conn, addr = userData.s.accept()
userData.clients += 1
print 'Connected with ' + addr[0] + ':' + str(addr[1])
#start new thread takes 1st argument as a function name to be run, second is the tuple of arguments
start_new_thread(users.clientthread ,(conn, userData.clients))
я в основном просто хочу быть способный выполнить любой код в main.py после того, как функция startConnection вызывается в новом потоке (т. е. печатает строку в этом экземпляре) ,
Я долгое время боролся с этой программой, Python для меня новичок, и мне кажется, что это довольно сложно. Я предполагаю, что я должен делать некоторые ошибки в том, как я реализовал многопоточность, любая помощь будет очень признательна!
Это полный код? Какие ошибки вы получаете? Вызов 'start_new_thread' выглядит недействительным. –