Python多线程
来源:互联网 发布:女生学php好找工作吗 编辑:程序博客网 时间:2024/06/10 20:49
#!/usr/bin/env python3import time, threading, queue#----------------多线程----------------# 简单多线程exdef method1(): count = 5 while count > 0: print(time.ctime(time.time())) print(threading.current_thread().name) count-=1t = threading.Thread(target = method1 , name = 'method1Thread')t.start()t.join()print(threading.current_thread().name)# lockbalance = 0lock = threading.Lock()def change_it(n): # 先存后取,结果应该为0: global balance balance = balance + n balance = balance - ndef run_thread(n): # 直接如下执行结果可能不为0 # for i in range(100000): # change_it(n) # 结果为0 for i in range(100000): # 先要获取锁: lock.acquire() try: change_it(n) finally: # 改完了一定要释放锁: lock.release()t1 = threading.Thread(target=run_thread, args=(5,))t2 = threading.Thread(target=run_thread, args=(8,))t1.start()t2.start()t1.join()t2.join()print(balance)print(threading.enumerate())''' 1.为什么Python死循环不会占用百分之百cpu N核cpu跑满需要n个死循环: 因为Python的线程虽然是真正的线程,但解释器执行代码时,有一个GIL锁:Global Interpreter Lock,任何Python线程执行前,必须先获得GIL锁,然后,每执行100条字节码,解释器就自动释放GIL锁,让别的线程有机会执行。这个GIL全局锁实际上把所有线程的执行代码都给上了锁,所以,多线程在Python中只能交替执行,即使100个线程跑在100核CPU上,也只能用到1个核。 2.线程模块 threading.currentThread(): 返回当前的线程变量。 threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。 threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。 除了使用方法外,线程模块同样提供了Thread类来处理线程,Thread类提供了以下方法: run(): 用以表示线程活动的方法。 start():启动线程活动。 join([time]): 等待至线程中止。这阻塞调用线程直至线程的join() 方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生。 isAlive(): 返回线程是否活动的。 getName(): 返回线程名。 setName(): 设置线程名。'''# 线程优先级队列 Queue''' Queue.qsize() 返回队列的大小 Queue.empty() 如果队列为空,返回True,反之False Queue.full() 如果队列满了,返回True,反之False Queue.full 与 maxsize 大小对应 Queue.get([block[, timeout]])获取队列,timeout等待时间 Queue.get_nowait() 相当Queue.get(False) Queue.put(item) 写入队列,timeout等待时间 Queue.put_nowait(item) 相当Queue.put(item, False) Queue.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号 Queue.join() 实际上意味着等到队列为空,再执行别的操作'''queue = queue.Queue(10)queue.put(t1)queue.put(t2)print(queue.empty())print(queue.qsize())
0 0
- Python多线程
- Python多线程
- Python多线程
- python多线程
- python 多线程
- python多线程
- python多线程
- python 多线程
- python多线程
- Python多线程
- Python 多线程
- python多线程
- python 多线程
- {python多线程}
- Python 多线程
- Python多线程
- python 多线程
- Python 多线程
- Jason Zhang & Power Station Concert Lucky Draw in iBET(Concert Ticket, iBET Casino, Jason Zhang, Luc
- 令人拍案叫绝的Wasserstein GAN
- Leetcode 396. Rotate Function
- 系统测试和集成测试的区别
- ajax中文乱码问题
- Python多线程
- openssl编程
- SVN如何断开和服务器
- 从文件中读取内容设置为对象的方法
- IOS
- Django系利问题解决
- python中关于模块,包以及import的学习
- Codeforces 681D Gifts by the List dfs+构造
- Subtext3