重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要讲解了解决Python3多线程之间的执行顺序问题,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
公司主营业务:成都网站制作、网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联公司推出定襄免费做网站回馈大家。一个多线程的题:定义三个线程ID分别为ABC,每个线程打印10遍自己的线程ID,按ABCABC……的顺序进行打印输出。
我的解法:
from threading import Thread, Lock # 由_acquire解锁执行后释放_release锁 def _print(_id: str, _acquire: Lock, _release: Lock) -> None: for i in range(10): _acquire.acquire() print(f"id:{_id}") _release.release() if __name__ == '__main__': # 创建三个锁供3个线程使用 mutex1 = Lock() mutex2 = Lock() mutex3 = Lock() # 定义三个线程A、B、C # 线程A需要mutex1解锁执行后释放mutex2 # 线程B需要mutex2解锁执行后释放mutex3 # 线程C需要mutex3解锁执行后释放mutex1 # 元组中第一位是自定义的线程ID,第二位是解锁需要的锁,第三位是释放的锁 threads = [Thread(target=_print, args=[i[0], i[1], i[2]]) for i in [('A', mutex1, mutex2), ('B', mutex2, mutex3), ('C', mutex3, mutex1)]] # 把mutex2和mutex3这两把锁先用了以便阻塞线程2和线程3的执行 mutex2.acquire() mutex3.acquire() # 接下来只有线程A可以先执行是因为mutex1并没有被占用 # 线程B和线程C需要分别等待着锁2和锁3的释放才能继续执行 [thr.start() for thr in threads] [thr.join() for thr in threads]