Python 基础知识(十二)并发编程

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值