Съдържание
Докато навлезем в света на множество обработки, сървъри и различни заявки, трябва да знаем, че има различни видове отговори или поведения, синхронно и асинхронен.Първият се състои в обслужване на заявка според теория на опашки, fifo, lifo и т.н. Тоест, докато процесът не приключи, той не отива при друг, виждайки това поведение, това не би било проблем за програма, която се справя Конци тъй като може да генерира няколко Конци за всяка заявка, която изпълнява специфични функции.
След това имаме асинхронния, който ни помага да служим с същата нишка няколко заявки в зависимост от състоянието им, така че ако няколко заявки се изпълнят, докато едно обработва нещо, можем да се заемем със следващото или може би дори не трябва да чакаме заявка за изпращане на данни до клиента:
Както виждаме на изображението, се прави симулация на работата на чата, където той се преглежда, докато има съобщение за предаване.
Асинхронни входни и изходни процеси
Когато правим асинхронно четене на заявките на клиента, не е необходимо първоначално да правим пълното четене на съобщението, но можем да го видим малко по малко, благодарение на скоростта на обработка.
За асинхронна работа в Python Имаме две функции, които могат да ни помогнат, едната е изберете а другото е анкета, от които последното е достъпно само за среди UNIX, така че може да бъде условие да поставим ограничение, ако искаме да направим мултиплатформена програма, но това е решението, което най -добре мащабира, така че трябва да вземем предвид тези подробности.
The изберете функция приема 3 последователности като задължителни аргументи, с четвърти аргумент, който не е задължителен и съдържа таймаут За секунди последователностите са връзки, за които ще изчакаме, като на 3 те съответстват на следното: вход, изход, изключителни условия (грешки, изключения и т.н.).
Ако не посочим a таймаут, функцията изберете ще изчака, докато една от поредиците е готова за действие, в противен случай, ако посочим таймаут, блоковете ще изчакат съответното време. Стойностите, върнати от функцията, представляват активно подмножество на всяка последователност, например първата върната последователност ще бъде входна поредица, където ще имаме какво да четем.
Нека да видим следния пример за код за това как да внедрите сървър с помощта на изберете функция:
импортирайте сокет, изберете s = socket.socket () хост = socket.gethostname () порт = 1234 s.bind ((хост, порт)) s.listen (5) входове = [s] докато True: [b] rs, ws, es = select.select (inputs, [], []) [/ b] за r в rs: ако r е s: c, addr = s.accept () отпечатайте „Got connection from“, addr inputs.append (c) else: try: data = r.recv (1024) disconnected = не данни освен socket.error: disconnected = True ако е изключен: print r.getpeername (), 'disconnected' inputs.remove (r) else: print data
Както виждаме, когато наричаме изберете функция преминавайки 3 -те задължителни последователности, предаваме променливата входове, което е свързано с това, което сървърът улавя, докато слуша на TCP порт 1234, след което правим повторение, за да покажем информацията.
Както виждаме, този аспект на изпълнението е доста прост и границата ще бъде дадена от нашата креативност при създаването на програмата.Хареса ли ви и помогнахте на този урок?Можете да възнаградите автора, като натиснете този бутон, за да му дадете положителна точка