import asyncio
import functools
import random
import time
async
def
worker(
sema,
name,
t):
'''worker'''
with (
await sema):
t2 = time.time() - t
print(
f
'worker
{name
:3d}
:start working at
{t2
:5.3f}
, ----------
{
str(sema).split(
" ")[-
1]
}
.')
await asyncio.sleep(random.random()*
2+
1)
t3 = time.time() - t
print(
f
'worker
{name
:3d}
:finished work at
{t3
:5.3f}
, cost
{t3-t2
:5.3f}
{
str(sema).split(
" ")[-
1]
}
.')
async
def
main(
loop):
'''main'''
sema=asyncio.Semaphore(
3)
t1=time.time()
task=asyncio.wait([worker(sema,i,t1)
for i
in
range(
100)])
await task
loop=asyncio.get_event_loop()
loop.run_until_complete(main(loop))
loop.close()