python并发编程知识点总结
摘要:1.到底什么是线程?什么是进程? Python自己没有这玩意,Python中调用的操作系统的线程和进程. 2.Python多线程情况下: 计算密集型操作:效率低,Python内置的一个全局解释器锁,锁的作用就是保证同一时刻一个进程中只有一个线程可以被cpu调度,多线程无法利用多核优势,可以通过多进程
阅读全文
协程+IO切换实现并发
摘要:```
from gevent import monkey
# 以后代码中遇到IO都会自动执行greenlet的switch进行切换
monkey.patch_all() import requests
import gevent def get_page1(url): ret = requests.get(url) print(url,ret.content) def g...
阅读全文
python基于yield实现协程
摘要:```
def f1(): print(11) yield print(22) yield print(33) def f2(): print(55) yield print(66) yield print(77) v1 = f1()
v2 = f2() next(v1) # v1.send(None)
next...
阅读全文
携程greenlet模块使用
摘要:```
import greenlet def f1(): print(11) gr2.switch() print(22) gr2.switch() def f2(): print(33) gr1.switch() print(44) # 协程 gr1
gr1 = greenlet.greenlet(f1)
# 协程 gr2
g...
阅读全文
如何让socket编程非阻塞?
摘要:```
import socket
# 创建socket
client = socket.socket()
# 将原来阻塞的位置变成非阻塞(报错)
client.setblocking(False) # 百度创建连接: 阻塞
try: # 执行了但报错了 client.connect(('www.baidu.com',80))
except BlockingIOError as ...
阅读全文
python线程池应用场景-爬虫
摘要:```
import requests
from bs4 import BeautifulSoup
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor def task(url): print(url) r1 = requests.get( url=url, ...
阅读全文
进程间实现数据共享的三种方式
摘要:1.Queue: linux: windows: 2.Manager:( ) Linux: windows: 3.其他电脑
阅读全文
python线程间数据共享(示例演示)
摘要:``` import threading data_list = [] def task(arg): data_list.append(arg) print(data_list) def run(): for i in range(10): p = threading.Thread(target=t
阅读全文
python进程间数据不共享(示例演示)
摘要:```
import multiprocessing data_list = [] def task(arg): data_list.append(arg) print(data_list) def run(): for i in range(10): p = multiprocessing.Process(target=task, args=(i...
阅读全文
python生产者消费者模型
摘要:```
import time
import queue
import threading q = queue.Queue() # 线程安全 def producer(id): """生产者""" while True: time.sleep(2) q.put('包子') print('厨师%s 生产了一个包子' % id)
...
阅读全文
python创建一个线程和一个线程池
摘要:创建一个线程 1.示例代码 创建一个线程池 1.示例代码 2.示例代码
阅读全文
多线程threading.local的作用及原理?
摘要:1.示例代码 2.原理 3.拓展 总结: 1.obj.x 调用方法__getattr__ 2.obj.x = 6 调用方法__setattr__ 4.作用 内部自动为每个线程维护一个空间(字典),用于当前存取属于自己的值。保证线程之间的数据隔离。 { 线程ID: {...} 线程ID: {...}
阅读全文
python多线程锁lock/Rlock/BoundedSemaphore/Condition/Event
摘要:''' 期望结果 加锁情况: 当前线程 0 修改后n的值为: 0 当前线程 1 修改后n的值为: 1 当前线程 2 修改后n的值为: 2 当前线程 3 修改后n的值为: 3 当前线程 4 修改后n的值为: 4 ''' ''' 不期望结果 没加锁情况 当前线程 0 修改后n的值为: 4 当前线程 1
阅读全文