Python 基础知识(十二)并发编程
进程 process:一个程序的执行实例;每个进程拥有自己的独立空间、内存、数据栈及辅助数据
线程 thread:同一进程内,可被并行激活的控制流;共享上下文(数据结构);特点:①便于信息共享和通信②线程访问顺序差异会导致结果不一致
Python GIL全局解释器锁 :①Global Interpreter Lock②Pyhton 代码由虚拟机(解释器主循环)控制③主循环同时只能有一个控制线程执行
多线程
单线程:
import time
def worker(n):
print(f’函数执行于:{time.ctime()}’)
time.sleep(n)
print(f’函数结束于:{time.ctime()}’)
def main():
print(f’[主函数执行于:{time.ctime()}]’)
worker(4)
worker(2)
print(f’[主函数结束于:{time.ctime()}]’)
main()
1.多线程
-thread 实现多线程
特点:①没有控制进程结束机制②只有一个同步语(锁)③功能少于threading模块
.start_new_thread(function,args,**)!在这里插入图片描述
-threading 实现多线程
(1).Thread 线程类 构造
.Thread(target=目标函数,args=(参数,))
.join()要求主线程等待
(2).current_thread() 获取当前线程
import time
import threading
def worker(n):
print(f’函数执行于:{time.ctime()}’)
time.sleep(n)
print(f’函数结束于:{time.ctime()}’)
class MyThread(threading.Thread):
def init(self,func,args):
threading.Thread.init(self)
self.func=func
self.args=args
def run(self):
self.func(*self.args)
def main():
print(f’[主函数执行于:{time.ctime()}]’)
threads=[]
# t1=threading.Thread(target=worker,args=(4,))
t1=MyThread(worker,(4,))
threads.append(t1)
# t2=threading.Thread(target=worker,args=(2,))
t2=MyThread(worker,(2,))
threads.append(t2)
for t in threads:
t.start()
for t in threads:
t.join()
print(f'[主函数结束于:{time.ctime()}]')
if name==‘main’:
main()
同步锁
队列
queue 模块:①Queue FIFO 先进先出② LifeQueue LIFO 先进后出③ PrioityQueue 优先队列
import threading
import queue
import time
import random
def producer(data_queue):
for i in range(5):
time.sleep(0.5)
item=random.randint(1,100)
data_queue.put(item)
print(f’{threading.current_thread().name}放入{item}’)
def consumer(data_queue):
while True:
try:
item=data_queue.get(timeout=3)
print(f’{threading.current_thread()}队列移除{item}’)
except queue.Empty:
break
else:
data_queue.task_done()
def main():
q=queue.Queue()
threads=[]
p=threading.Thread(target=producer,args=(q,))
p.start()
for i in range(2):
c=threading.Thread(target=consumer,args=(q,))
threads.append©
for t in threads:
t.start()
for t in threads:
t.join()
q.join()
if name==‘main’:
main()
multiprocessing 多进程模块
concurrent.futures 模块
ThreadPoolExecutor
ProcessPoolExecutor