首页 / PYTHON / python之多线程
python之多线程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python之多线程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1861字,纯文字阅读大概需要3分钟。
内容图文
![python之多线程](/upload/InfoBanner/zyjiaocheng/1229/fec25b69349e45c8974a2f314a918523.jpg)
多线程是为了同步完成多项任务,通过提高资源效率来提高系统的效率。它是在同一时间完成多项任务的时候实现的。在 Python 中,使用多线程的模块是 threading。其中最常用的是 Thread 类。
import threading import time def coding(): for x in range(3): print(‘%s正在写代码‘ % x) time.sleep(1) def drawing(): for x in range(3): print(‘%s正在画图‘ % x) time.sleep(1) def single_thread(): coding() drawing() def multi_thread(): t1 = threading.Thread(target=coding) t2 = threading.Thread(target=drawing) t1.start() t2.start() if __name__ == ‘__main__‘: multi_thread()
可以使用 threading.enumerate() 函数来看到当前线程的数量。
另外, 也可以使用类的形式来封装一个线程,这样,代码具有更好的扩展性。它是继承 Threading 类。并且重写 run 方法。
import threading import time class CodingThread(threading.Thread): def run(self): for x in range(3): print(‘%s正在写代码‘ % threading.current_thread()) time.sleep(1) class DrawingThread(threading.Thread): def run(self): for x in range(3): print(‘%s正在画图‘ % threading.current_thread()) time.sleep(1) def multi_thread(): t1 = CodingThread() t2 = DrawingThread() t1.start() t2.start() if __name__ == ‘__main__‘: multi_thread()
多线程全局变量共享的安全问题
因为多线程是在同一个进程中运行的。在进程中的全局变量是可以共享的,这就造成了一个问题,因为线程执行的顺序是无序的。有可能会造成数据错误。比如以下代码:
import threading tickets = 0 def get_ticket(): global tickets for x in range(1000000): tickets += 1 print(‘tickets:%d‘%tickets) def main(): for x in range(2): t = threading.Thread(target=get_ticket) t.start() if __name__ == ‘__main__‘: main()
为了解决以上问题,Python 解释器中引入了锁机制。当我一个线程使用这个变量的时候,就给它上了一个锁,别的线程此刻无法访问这个变量,直到我这个线程使用完后,然后释放掉锁。就像我去厕所,关上了门,别人就无法进来使用,直到我打开门后,别人在能上厕所。锁的引入是为了解决全局变量的安全问题。
1 import threading 2 3 VALUE = 0 4 5 gLock = threading.Lock() 6 7def add_value(): 8global VALUE 9 gLock.acquire() 10for x in range(1000000): 11 VALUE += 112 gLock.release() 13 print(‘value:%d‘%VALUE) 1415def main(): 16for x in range(2): 17 t = threading.Thread(target=add_value) 18 t.start() 1920if __name__ == ‘__main__‘: 21 main()
原文:https://www.cnblogs.com/aisiyuan/p/9607244.html
内容总结
以上是互联网集市为您收集整理的python之多线程全部内容,希望文章能够帮你解决python之多线程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。