摘要: #ThreadLocal import threading #创建全局ThreadLocal loacl_school = threading.local() class Student(): def __init__(self,name): self.name = name def process_student(name): std = Student(n... 阅读全文
posted @ 2018-03-22 23:10 Bob__Zhang 阅读(153) 评论(0) 推荐(0) 编辑
摘要: #异步 ''' 同步调用就是,你喊你朋友吃饭,你朋友正在忙 如果你一直在那等他,等你朋友忙完,你们一块去--同步调用 你喊你朋友吃饭,你朋友正在忙, 如果你自己做你自己的事情,你朋友忙完,找到你,一块去吃饭--异步调用 ''' from multiprocessing import Process,Pool import os,time def download(): print(... 阅读全文
posted @ 2018-03-22 23:10 Bob__Zhang 阅读(142) 评论(0) 推荐(0) 编辑
摘要: ''' 在多线程环境下,每个线程都有自己的数据,一个线程使用自己的局部变量比使用全局变量好, 因为局部变量只有线程自己能看见,不会影响其他线程,而全局变量的修改必须加锁(阻塞--效率低) 但是在使用局部变量的时候,就在函数间调用的时候,传递起来很麻烦 每个函数一层一层调用这个传递过来的参数,很麻烦,用全局变量,不安全,效率低 每个线程处理不同的student对象,不能共享 ''' impor... 阅读全文
posted @ 2018-03-22 23:09 Bob__Zhang 阅读(502) 评论(0) 推荐(0) 编辑
摘要: #多对多 import threading import queue,time,random q = queue.Queue(maxsize=10) count = 1 #生产者 def producer(name): global count while True: if mutex.acquire(): q.put('包子%d'%... 阅读全文
posted @ 2018-03-22 23:08 Bob__Zhang 阅读(413) 评论(0) 推荐(0) 编辑
摘要: #生产者与消费者模式 ''' 定义:在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题. 该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度 案例:厨师做包子和顾客吃包子的问题。 ''' import threading import queue,time q = queue.Queue(maxsize=10) #生产者 def producer(name):... 阅读全文
posted @ 2018-03-22 23:07 Bob__Zhang 阅读(359) 评论(0) 推荐(0) 编辑
摘要: #生产者与消费者模式,模式解释:比如MVC设计模式 ''' 1.队列 (1)特点:先进先出 (2)python2 VS python3 python2:from Queue import queue python3:from queue import Queue join--阻塞动作 blocked--状态 (3)使用 Python的Queue模块中提供了同步的,线程安全的队列类 a.FIF... 阅读全文
posted @ 2018-03-22 23:06 Bob__Zhang 阅读(630) 评论(0) 推荐(0) 编辑
摘要: #1.死锁 ''' 在线程间共享多个资源的时候,如果两个线程分别占有一部分资源,并且同时等待对方资源时,就会造成死锁 尽管死锁很少发生,但一旦发生就会造成应用的停止响应 ''' #2.例子:有两个人分别做"西兰花"和"红烧肉",每个人都需要"锅"和"铲子" import threading,time class XiLanHua_Thread(threading.Thread): def... 阅读全文
posted @ 2018-03-22 23:03 Bob__Zhang 阅读(188) 评论(0) 推荐(0) 编辑
摘要: import threading g_num = 0 def fun(): global g_num for i in range(10000000): mutexFlag = mutex.acquire(True) if mutexFlag: g_num += 1 mutex.release() ... 阅读全文
posted @ 2018-03-22 23:01 Bob__Zhang 阅读(118) 评论(0) 推荐(0) 编辑
摘要: #1.多线程开发可能遇到的问题 ''' 假设两个两个线程t1\t2都要对num进行操作(增1),t1和t2都各自对num修改10次,num最终的值为增20 ''' import threading,time #全局变量 g_num = 0 def w1(): global g_num for i in range(100000000): g_num+=1 ... 阅读全文
posted @ 2018-03-22 22:59 Bob__Zhang 阅读(200) 评论(0) 推荐(0) 编辑
摘要: #在threading模块当中定义了一个Lock类,可以方便的使用锁定: # #1.创建锁 # mutex = threading.Lock() # # #2.锁定 ''' mutex.acquire(True/False) True:如果所要获取的资源已经"锁定",表示当前线程处地等待(阻塞),直到获取到这个锁为止--默认值 False:不阻塞,即不管本次调用能够成功上锁,都不会卡在这,而是... 阅读全文
posted @ 2018-03-22 22:59 Bob__Zhang 阅读(881) 评论(0) 推荐(0) 编辑
摘要: #多进程VS多线程 #登录多个qq账号就是多个进程,正常情况下一个软件就是一个进城费 #打开两个以上qq聊天窗口就是多线程 #功能: #进程,能够完成多任务,比如一台能够同时运行多个qq #线程,能够完成多任务,比如一个qq中的多个聊天窗口 #定义 #进程是系统进行资源分配和调试的一个独立单位 #线程是进程的一个实体,是CPU调用和分派的基本单位,它比进程更小的能够独立运行的基本单位 #线程基... 阅读全文
posted @ 2018-03-22 22:57 Bob__Zhang 阅读(192) 评论(0) 推荐(0) 编辑
摘要: import copy a = 11 print(id(a))#和下面的id号不一样 b = a a = 12 print(b,id(a),id(b))#11 1810457152 1810457120 #输出结果:11 无影响 #浅拷贝copy.copy #1.=赋值 download_list = [11,22,33] copy_list = download_list downlo... 阅读全文
posted @ 2018-03-22 22:56 Bob__Zhang 阅读(118) 评论(0) 推荐(0) 编辑
摘要: #列表当做实参传递到线程中 import threading,time,random,copy def work1(download_list,finish_list): #每次从当前下载列表当中去取第一个元素进行下载 while True: file = download_list[0] print("--in work1--download:%... 阅读全文
posted @ 2018-03-22 22:55 Bob__Zhang 阅读(276) 评论(0) 推荐(0) 编辑
摘要: #多线程---全局变量---共享全局变量 #多线程可以对全局变量进行修改,修改后的结果会影响下一个线程 #进程不可以共享全局变量,子进程是复制父进程的全局变量,修改后互不影响 from threading import Thread import time,random g_num = 100 def work1(): global g_num for i in range(3... 阅读全文
posted @ 2018-03-22 22:54 Bob__Zhang 阅读(1271) 评论(0) 推荐(0) 编辑
摘要: import threading #线程名字 # class MyThread(threading.Thread): # # def run(self): # print("%s线程正在下载..."%self.name) # # if __name__ == "__main__": # t = MyThread(name="downloadThread") # ... 阅读全文
posted @ 2018-03-22 22:53 Bob__Zhang 阅读(150) 评论(0) 推荐(0) 编辑
摘要: #传参数 import threading class MyThread(threading.Thread): def __init__(self,fileName): threading.Thread.__init__(self) self.fileName = fileName print("开启线程,下载%s文件"%fileName... 阅读全文
posted @ 2018-03-22 22:51 Bob__Zhang 阅读(225) 评论(0) 推荐(0) 编辑
摘要: #用自己定义的线程完成 import threading,time,random class sing(threading.Thread): def run(self): for i in range(3): print("正在唱歌%d"%i) time.sleep(random.random()) class dance... 阅读全文
posted @ 2018-03-22 22:50 Bob__Zhang 阅读(127) 评论(0) 推荐(0) 编辑
摘要: #创建线程的第二种写法 #1.自定义一个类 #2.继承Thread #3.重写run()方法 import threading,time,random class MyThread(threading.Thread): def run(self): for i in range(3): time.sleep(random.random()) ... 阅读全文
posted @ 2018-03-22 22:49 Bob__Zhang 阅读(375) 评论(0) 推荐(0) 编辑
摘要: import threading,time,random #查看线程的数量 def sing(): for i in range(3): print('正在唱歌....%d'%i) time.sleep(random.random()*10) def dance(): for i in range(3): print('正在跳舞.... 阅读全文
posted @ 2018-03-22 22:47 Bob__Zhang 阅读(181) 评论(0) 推荐(0) 编辑
摘要: import time,random,threading def download(fileName): print('开始下载%s文件'%fileName) time.sleep(random.random()*10) print('%s文件下载完成'%fileName) # 单线程(默认主线程) # if __name__== "__main__": # ... 阅读全文
posted @ 2018-03-22 22:43 Bob__Zhang 阅读(392) 评论(0) 推荐(0) 编辑