Я пишу библиотеку, которую я бы хотел, чтобы конечные пользователи могли произвольно использовать, как если бы ее методы и функции не были сопрограммами.
Например, с учетом этой функции:
@asyncio.coroutine
def blah_getter():
return (yield from http_client.get('http://blahblahblah'))
Конечный пользователь, который не хочет использовать какие-либо асинхронные функции в своем собственном коде, все равно должен импортировать asyncio и запустить это:
>>> response = asyncio.get_event_loop().run_until_complete(blah_getter())
Было бы здорово, если бы я мог, внутри blah_getter
определить, был ли я вызван как сопрограмма или нет, и отреагировать соответственно.
Так что-то вроде:
@asyncio.coroutine
def blah_getter():
if magically_determine_if_being_yielded_from():
return (yield from http_client.get('http://blahblahblah'))
else:
el = asyncio.get_event_loop()
return el.run_until_complete(http_client.get('http://blahblahblah'))