新的启动事件循环
import asyncio
import logging
from contextlib import closing
import nest_asyncio
nest_asyncio.apply( )
logging.basicConfig(
level = logging.INFO,
format = "%(asctime)s %(process)d %(thread)d [*] %(message)s"
)
async def myWorker(name, semaphore):
await semaphore.acquire( )
logging.info(f"{name}:成功获取信号量")
await asyncio.sleep(3)
logging.info(f"{name}:释放信号量")
semaphore.release( )
async def main( ):
logging.info("主协程")
mySemaphore = asyncio.Semaphore(value = 2)
await asyncio.wait([
myWorker("A", mySemaphore),
myWorker("B", mySemaphore),
myWorker("C", mySemaphore),
myWorker("D", mySemaphore),
myWorker("E", mySemaphore),
])
if __name__ == "__main__":
with closing(asyncio.get_event_loop( )) as loop:
loop.run_until_complete(main( ))
旧的启动事件循环
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(semaphore):
await semaphore.acquire()
logging.info("成功获取信号量")
await asyncio.sleep(3)
logging.info("释放信号量")
semaphore.release()
async def main(loop):
logging.info("主协程")
mySemaphore = asyncio.Semaphore(value=2)
return await asyncio.wait([
myWorker(mySemaphore),
myWorker(mySemaphore),
myWorker(mySemaphore),
])
if __name__ == '__main__':
loop = asyncio.get_event_loop()
try:
done, pending = loop.run_until_complete(main(loop))
logging.info("所有任务完成")
except KeyboardInterrupt as e:
asyncio.Task.all_tasks()
asyncio.gather(*asyncio.Task.all_tasks()).cancel()
loop.stop()
finally:
pass
2019-11-15 17:32:19,892 12912 9828 [*] 主协程
2019-11-15 17:32:19,894 12912 9828 [*] 成功获取信号量
2019-11-15 17:32:19,896 12912 9828 [*] 成功获取信号量
2019-11-15 17:32:22,897 12912 9828 [*] 释放信号量
2019-11-15 17:32:22,901 12912 9828 [*] 释放信号量
2019-11-15 17:32:22,907 12912 9828 [*] 成功获取信号量
2019-11-15 17:32:25,916 12912 9828 [*] 释放信号量
2019-11-15 17:32:25,921 12912 9828 [*] 所有任务完成