鱼C论坛

 找回密码
 立即注册
查看: 3322|回复: 5

[作品展示] 一手画圈一手画圆——Python多线程

[复制链接]
发表于 2016-10-23 12:23:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 wei_Y 于 2016-10-23 12:25 编辑


哎~??
啊噜很圆,

但是你能在调戏啊噜时调戏熊本吗?!
方.jpg


好吧,python也不能。


在Python中,我们可以很容易的开启一个新线程。

from threading import Thread

Thread函数就可以让我们创建一个新的线程。

经典的time法。

一起来看;
  1. def a(x, t):
  2.     while 1:
  3.         print(x)
  4.         time.sleep(t)
复制代码



首先这里有一个函数a,作用就是打印出来x,然后睡个几秒钟。

  1. b = Thread(target=a, args=('我是1', 1))
  2. c = Thread(target=a, args=('我是2', 2))
复制代码


我们创建两只线程。

简单介绍下常用到的参数。

  1. class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)
复制代码


target 就是目标,我们要执行的函数,
args就是目标执行需要的参数,
kwargs是带有默认参数时用到的。
  1. def d(arg=7):
  2.     pass
复制代码

这样我们在创建时就可以用:
Thread(target=d, kwargs={arg: 7})这样。

其他的不是很常用。

###
Ok,参数中需要注意args,这货是个元组。
比如。
  1. def e(q):
  2.     pass
复制代码

我们在创建线程时如果这么写
Thread(target=e, args=(77))
那么他就会爆个错,
  1. TypeError: e() argument after * must be a sequence, not int
复制代码

所以对于单参数的函数我们写参数时需要写成
Thread(target=e, args=(77,))


话说回来,
  1. b = Thread(target=a, args=('我是1', 1))
  2. c = Thread(target=a, args=('我是2', 2))
复制代码


创建好这么两只线程,只要调用start()就可以启动他们。

  1. b.start()
  2. c.start()
复制代码


结果:
  1. 我是1
  2. 我是2
  3. 我是1
  4. 我是1
  5. 我是2
  6. 我是1
  7. 我是1
  8. 我是2
  9. 我是1
复制代码


------
大部分教程中还会在start()后加一个join()函数。
join有什么用呢,join就是让一个线程一直执行完成后才给其他线程执行。

我们试试

  1. b.start()
  2. b.join()
  3. c.start()
  4. c.join()
复制代码

  1. 我是1
  2. 我是1
  3. 我是1
  4. 我是1
  5. 我是1
  6. 我是1
  7. 我是1
  8. 我是1
  9. 我是1
复制代码


结果是只有1没有2,。

Python本来具有调戏啊噜的同时调戏熊本!
但是加上join后就失去了这个能力,这让python又变回了单线程!

可是可是,我看到好像是这么写的:
  1. b.start()
  2. c.start()
  3. b.join()
  4. c.join()
复制代码

  1. 我是1
  2. 我是2
  3. 我是1
  4. 我是1
  5. 我是2
  6. 我是1
  7. 我是2
  8. 我是1
复制代码


这样就是让你的python两个线程交替执行了,
对于少量的线程需求使用这种方法完全可以。
Python可以同时调戏几个啊噜和几个熊本!

但其实和只start()相差不多。



参考:
http://www.liaoxuefeng.com/wiki/ ... 916192364506fa5d000



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-10-24 23:55:11 | 显示全部楼层
好赞啊 ~虽然看不懂!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-8 16:36:21 | 显示全部楼层
能讲点threading吗  这个好像没有threahing实用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-8 18:09:31 | 显示全部楼层
学习学习!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-9 19:37:21 | 显示全部楼层
本帖最后由 wei_Y 于 2017-2-9 19:39 编辑
H.B.F 发表于 2017-2-8 16:36
能讲点threading吗  这个好像没有threahing实用


这是threading里面的一个小类,threading只是个文件啊。还有后续哦,点击到空间查看!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-18 13:50:02 | 显示全部楼层
可以的,顶一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-8 10:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表