day40——多线程共享变量、线程池
线程共享变量
多线程和多进程不同之处在于多线程本身就是可以和父进程共享内存的,这也是为什么其中一个线程挂掉以后,为什么其他线程也会死掉的道理。
1 import threading 2 3 4 5 def worker(): 6 l.append("wxp") 7 l.append("wxx") 8 l.append("wpp") 9 10 if __name__ == "__main__": 11 l = list() 12 l += range(1, 10) 13 print(l) 14 t = threading.Thread(target=worker) 15 t.start() 16 print(l) 17 18 输出结果: 19 [1, 2, 3, 4, 5, 6, 7, 8, 9] 20 [1, 2, 3, 4, 5, 6, 7, 8, 9, 'wxp', 'wxx', 'wpp']
线程池(不常用,了解即可)
通过传入一个参数组来实现多线程,并且它的多线程是有序的,顺序与参数组中的参数顺序保持一致。
安装包:
pip install threadpool
1 import threadpool 2 3 4 def hello(m, n, o): 5 """""" 6 print "m = %s, n = %s, o = %s" % (m, n, o) 7 8 9 if __name__ == '__main__': 10 # 方法1 11 lst_vars_1 = ['1', '2', '3'] 12 lst_vars_2 = ['4', '5', '6'] 13 func_var = [(lst_vars_1, None), (lst_vars_2, None)] 14 # 方法2 15 dict_vars_1 = {'m': '1', 'n': '2', 'o': '3'} 16 dict_vars_2 = {'m': '4', 'n': '5', 'o': '6'} 17 func_var = [(None, dict_vars_1), (None, dict_vars_2)] 18 19 pool = threadpool.ThreadPool(2) 20 requests = threadpool.makeRequests(hello, func_var) 21 [pool.putRequest(req) for req in requests] 22 pool.wait() 23 24 输出结果 25 m = 1, n = 2, o = 3 26 m = 4, n = 5, o = 6