Hoy en día, el uso de asynio aprendizaje, todavía hay esperanza de que no está bien es el gran Dios señalador.
Síncrona y asíncrona, síncrona lo que es, ¿cuál es el asíncrona?
medios de sincronización de la aplicación del código, y el siguiente es del orden de ejecución, si se encuentra con las operaciones de IO u otras operaciones que consumen mucho tiempo, todo el programa serán bloqueados allí, por lo que la CPU de la computadora es un enorme desperdicio
Asíncronos y síncronos exactamente lo contrario, que no espere a que esta consumen mucho tiempo vuelve operación el resultado, la ejecución del programa continúa en la siguiente transacción, después de que la transacción ha sido procesada para informar al programa principal, a continuación, se devuelven los resultados, por lo que podemos aprovechar de un gran equipo recursos de la CPU, y la eficiencia del código serán altos
A diferencia de asynio multihilo, aunque la operación asincrónica, pero es esencialmente un código de sincronización
# El siguiente es el código para simular la solicitud de página asincrónica, el efecto deseado se imprime al instante 10 hola palabra, en lugar de esperar hasta que un análisis completo de una página web, pero al mismo tiempo al analizado
importación asyncio #这里模仿请求网页的代码 asíncrono def get_html (url): Await asyncio.sleep (url) de impresión ( " hola palabra: {} " .formato (url)) si __name__ == " __main__ " : loop = asyncio. get_event_loop () c = [get_html ( 2 ) para i en rango ( 10 )] un = loop.run_until_complete (asyncio.wait (c)) #结果: # hola palabra: 2 # palabra hello: 2 palabra # hello:2 # hola palabra: 2 # palabra hola: 2 # palabra hola: 2 # palabra hola: 2 # palabra hola: 2 # palabra hola: 2 # palabra hola: 2
Debido asynio no admite solicitudes HTTP asíncronas, si las solicitudes están en el interior con una biblioteca u otra solicitud página web de la biblioteca ya que las solicitudes se sincronizan biblioteca
Aquí el conocimiento aprendido en la grabación de un punto, asynio es apoyar socket asincrónico, por lo que el uso de manera que aquí toma de pedir resultados HTTP, también se espera que la salida resultante, la misma URL se imprimen de forma simultánea
importación asyncio de urllib.parse importación urlparse # 这里模仿请求网页的代码 asíncrono def get_html (url): irul = urlparse (url) de host = iurl.netloc ruta = iurl.path si camino == "" : ruta = " / " request_html = " GET {} HTTP / 1.1 \ r \ nHOST: {} \ r \ nConnection: close \ r \ n \ r \ n " .formato (path, host) lector, escritor = asyncio.open_connection await (host = anfitrión , port = 80) #Debido a que esta conexión es se requiere una operación que consume tiempo para lograr el efecto asíncrono lo esperan # porque la solicitud está siendo usada escritor En consecuencia, la toma es equivalente a enviar al servidor # bytes de datos deben ser transmitidos, la codificación Unicode no puede ser escritor. Write (request_html.encode ( "UTF-8 " )) datos = B "" la asíncrono para D en Reader: Data + = D # impresas directamente Imprimir (datos) devolver datos SI el __name__ == " __main__ " : url_list = [ " http://www.guqin.cc/portal.php " , " Http://www.guqin.cc/thread-2564-1-1.html " , " http://www.guqin.cc/thread-2564-1-1.html " , " http: // www .guqin.cc / hilo-2564-1-1.html " " http://www.guqin.cc/thread-2564-1-1.html " ] bucle = asyncio.get_event_loop () c = [get_html ( url) para url en url_list] un = loop.run_until_complete (asyncio.wait (c))