2017-05-17 6 views
1

Ich habe versucht, eines der Beispiele aus diesem page ausführen. Aus irgendeinem Grund funktioniert es nicht, wenn Sie dieses Programm ausführen, wird es zufällige Menge von "Hallo" drucken und danach wird es stecken bleiben. Ich benutze Python 3.6.0, können Sie mir bitte helfen, herauszufinden, was das Problem ist?Python asyncio aus irgendeinem Grund stecken

import asyncio 
import aiohttp 
import bs4 


@asyncio.coroutine 
def print_page(url): 
    response = yield from aiohttp.request('GET', url) 
    body = yield from response.text() 
    print(body) 


@asyncio.coroutine 
def get(*args, **kwargs): 
    response = yield from aiohttp.request('GET', *args, **kwargs) 
    return (yield from response.text()) 


def first_magnet(page): 
    return "hi" 


@asyncio.coroutine 
def print_magnet(query): 
    url = 'http://www.aclweb.org/anthology/J/J{}/'.format(query) 
    page = yield from get(url, compress=True) 
    magnet = first_magnet(page) 
    print('{}: {}'.format(query, magnet)) 


distros = range(80,90) 
loop = asyncio.get_event_loop() 
f = asyncio.wait([print_magnet(d) for d in distros]) 
loop.run_until_complete(f) 
+3

'return (yield von response.text())' klingt komisch für mich ... –

+0

Ihr Code funktioniert gut für mich, das Programm kehrt ordnungsgemäß nach dem Drucken '8X: hi' zehnmal zurück. Ziehen Sie auch die Verwendung der Syntax [async/await] (http://asyncio.readthedocs.io/en/latest/hello_world.html#simple-coroutine) in Betracht, wenn Sie python> = 3.5 verwenden. – Vincent

Antwort

0

Ich kann Code auf Python 3.6.1 für Windows feststecken bestätigt.

Sieht aus wie Problem in Bezug auf compress=True param. Wenn Sie es entfernen, wird der Code in Ordnung sein.

Ich denke, Sie sollten diesen Fehler zu Aiohttp issue tracker melden.

+0

Danke für Informationen –

Verwandte Themen