import threading
import asyncio
@asyncio.coroutine
def hello():
print('Start Hello', threading.currentThread())
yield from asyncio.sleep(5)
print('End Hello', threading.currentThread())
@asyncio.coroutine
def world():
print('Start World', threading.currentThread())
yield from asyncio.sleep(3)
print('End World', threading.currentThread())
# 获取EventLoop:
loop = asyncio.get_event_loop()
tasks = [hello(), world()]
# 执行coroutine
loop.run_until_complete(asyncio.wait(tasks))
loop.close() import asyncio
@asyncio.coroutine
def worker(text):
"""
协程运行的函数
:param text:
:return:
"""
i = 0
while True:
print(text, i)
try:
yield from asyncio.sleep(.1)
except asyncio.CancelledError:
break
i += 1
@asyncio.coroutine
def client(text, io_used):
worker_fu = asyncio.ensure_future(worker(text))
# 假装等待I/O一段时间
yield from asyncio.sleep(io_used)
# 结束运行协程
worker_fu.cancel()
return 'done'
loop = asyncio.get_event_loop()
tasks = [client('xiaozhe', 3), client('zzzz', 5)]
result = loop.run_until_complete(asyncio.wait(tasks))
loop.close()
print('Answer:', result) cc_list = ['China', 'USA']
@asyncio.coroutine
def get_flag(cc):
url = '{}/{cc}/{cc}.gif'.format(BASE_URL, cc=cc.lower())
resp = yield from aiohttp.request('GET', url)
image = yield from resp.read()
return image
@asyncio.coroutine
def download_one(name):
image = yield from get_flag(name)
save_flag(image, name.lower() + '.gif')
return name
loop = asyncio.get_event_loop()
wait_coro = asyncio.wait([download_one(cc) for cc in sorted(cc_list)])
res, _ = loop.run_until_complete(wait_coro)
loop.close() @asyncio.coroutine
def hello():
print("Hello world!")
r = yield from asyncio.sleep(1)
print("Hello again!") async def hello():
print("Hello world!")
r = await asyncio.sleep(1)
print("Hello again!") import asyncio
import aiohttp
urls = [
'http://HdhCmsTest163测试数据/',
'http://HdhCmsTestsina测试数据.cn/',
'https://HdhCmsTesthupu测试数据/',
'http://HdhCmsTest'
]
async def get_url_data(u):
"""
读取url的数据
:param u:
:return:
"""
print('running ', u)
async with aiohttp.ClientSession() as session:
async with session.get(u) as resp:
print(u, resp.status, type(resp.text()))
# print(await resp.text())
return resp.headers
async def request_url(u):
"""
主调度函数
:param u:
:return:
"""
res = await get_url_data(u)
return res
loop = asyncio.get_event_loop()
task_lists = asyncio.wait([request_url(u) for u in urls])
all_res, _ = loop.run_until_complete(task_lists)
loop.close()
print(all_res) 以上就是详解Python使用asyncio包处理并发的方法的详细内容,更多请关注Gxl网其它相关文章!
查看更多关于详解Python使用asyncio包处理并发的方法的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did84458