线程共享变量
多线程和多进程不同之处在于多线程本身就是可以和父进程共享内存的,这也是为什么其中一个线程挂掉以后,为什么其他线程也会死掉的道理。
程序示例如下:
-
#!/usr/bin/env python
-
# -*- coding:utf-8 -*-
-
# Author :Alvin.xie
-
# @Time :2017-12-14 11:52
-
# @file :1.py
-
-
-
import threading
-
-
-
def worker(l):
-
l.append("ling")
-
l.append("shang")
-
l.append("hello")
-
-
-
if __name__ == "__main__":
-
l = list()
-
l += range(1, 10)
-
print (l)
-
t = threading.Thread(target=worker, args=(l,))
-
t.start()
-
print(l)
执行结果:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 'ling', 'shang', 'hello']
线程池
通过传入一个参数组来实现多线程,并且它的多线程是有序的,顺序与参数组中的参数顺序保持一致。
安装包:
pip
install threadpool
代码示例如下:
-
#!/usr/bin/env python
-
# -*- coding:utf-8 -*-
-
# Author :Alvin.xie
-
# @Time :2017-12-14 12:09
-
# @file :2.py
-
-
import threadpool
-
-
def hello(m, n, o):
-
print "m = %s, n = %s, o = %s" % (m, n, o),
-
print ""
-
-
if __name__ == '__main__':
-
lst_vars_1 = ['1', '2', '3']
-
lst_vars_2 = ['4', '5', '6']
-
func_var = [(lst_vars_1, None), (lst_vars_2, None)]
-
-
-
dict_vars_1 = {'m': '1', 'n': '2', 'o': '3'}
-
dict_vars_2 = {'m': '4', 'n': '5', 'o': '6'}
-
func_var = [(None, dict_vars_1), (None, dict_vars_2)]
-
pool = threadpool.ThreadPool(2)
-
requests = threadpool.makeRequests(hello, func_var)
-
[pool.putRequest(req) for req in requests]
-
pool.wait()
执行结果:
m = 1, n = 2, o = 3
m = 4, n = 5, o = 6
阅读(2811) | 评论(0) | 转发(0) |