import asyncio
import time
import logging
import nest_asyncio
nest_asyncio.apply()
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s %(process)d %(thread)d [*] %(message)s"
)
async def myWorker(lock, i):
logging.info(f"试图获得锁定:{i}")
async with lock:
logging.info(f"目前已锁定:{i}")
await asyncio.sleep(3)
logging.info(f"解锁临界区:{i}")
async def main():
lock = asyncio.Lock()
return await asyncio.wait([
myWorker(lock, 1),
myWorker(lock, 2),
myWorker(lock, 3),
])
if __name__ == '__main__':
loop = asyncio.get_event_loop()
try:
done, pending = loop.run_until_complete(main())
logging.info("所有任务完成")
except KeyboardInterrupt as e:
logging.info(asyncio.Task.all_tasks())
logging.info(asyncio.gather(*asyncio.Task.all_tasks()).cancel())
loop.stop()
finally:
pass
2019-11-15 15:55:23,648 3664 12672 [*] 试图获得锁定:3
2019-11-15 15:55:23,651 3664 12672 [*] 目前已锁定:3
2019-11-15 15:55:23,652 3664 12672 [*] 试图获得锁定:1
2019-11-15 15:55:23,653 3664 12672 [*] 试图获得锁定:2
2019-11-15 15:55:26,654 3664 12672 [*] 解锁临界区:3
2019-11-15 15:55:26,659 3664 12672 [*] 目前已锁定:1
2019-11-15 15:55:29,662 3664 12672 [*] 解锁临界区:1
2019-11-15 15:55:29,664 3664 12672 [*] 目前已锁定:2
2019-11-15 15:55:32,666 3664 12672 [*] 解锁临界区:2
2019-11-15 15:55:32,668 3664 12672 [*] 所有任务完成