Chinaunix首页 | 论坛 | 博客
  • 博客访问: 235726
  • 博文数量: 57
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 557
  • 用 户 组: 普通用户
  • 注册时间: 2015-10-01 18:05
文章分类

全部博文(57)

文章存档

2017年(57)

我的朋友

分类: Python/Ruby

2017-12-14 12:23:19

线程共享变量

多线程和多进程不同之处在于多线程本身就是可以和父进程共享内存的,这也是为什么其中一个线程挂掉以后,为什么其他线程也会死掉的道理。

程序示例如下:

点击(此处)折叠或打开

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. # Author :Alvin.xie
  4. # @Time :2017-12-14 11:52
  5. # @file :1.py


  6. import threading


  7. def worker(l):
  8.     l.append("ling")
  9.     l.append("shang")
  10.     l.append("hello")


  11. if __name__ == "__main__":
  12.     l = list()
  13.     l += range(1, 10)
  14.     print (l)
  15.     t = threading.Thread(target=worker, args=(l,))
  16.     t.start()
  17.     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

代码示例如下:

点击(此处)折叠或打开

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. # Author :Alvin.xie
  4. # @Time :2017-12-14 12:09
  5. # @file :2.py

  6. import threadpool

  7. def hello(m, n, o):
  8.     print "m = %s, n = %s, o = %s" % (m, n, o),
  9.     print ""

  10. if __name__ == '__main__':
  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.     dict_vars_1 = {'m': '1', 'n': '2', 'o': '3'}
  15.     dict_vars_2 = {'m': '4', 'n': '5', 'o': '6'}
  16.     func_var = [(None, dict_vars_1), (None, dict_vars_2)]
  17.     pool = threadpool.ThreadPool(2)
  18.     requests = threadpool.makeRequests(hello, func_var)
  19.     [pool.putRequest(req) for req in requests]
  20.     pool.wait()
执行结果:
m = 1, n = 2, o = 3 
m = 4, n = 5, o = 6












阅读(2811) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~