鱼C论坛

 找回密码
 立即注册
查看: 1725|回复: 7

[已解决]python多线程怎么用?

[复制链接]
发表于 2020-9-15 16:14:23 | 显示全部楼层 |阅读模式

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

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

x
python一般多线程是用
import thread还是import threading?

然后,怎么让主程序等待所有子线程运行完才结束?
最佳答案
2020-9-15 17:05:34
vcbeaut 发表于 2020-9-15 17:03
join()如果再for循环外,那么前面的t不就被覆盖了吗?

你试试效果吧,我一直是参考这篇做法来写多线程的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-9-15 16:22:44 | 显示全部楼层
本帖最后由 疾风怪盗 于 2020-9-15 16:26 编辑

参考一下
  1. # coding=utf-8
  2. import threading
  3. from time import ctime, sleep


  4. def music(func):
  5.     print("I was listening to %s. %s" % (func, ctime()))
  6.     sleep(1)


  7. def move(func):
  8.     print("I was at the %s! %s" % (func, ctime()))
  9.     sleep(5)


  10. if __name__ == '__main__':
  11.     threads = []
  12.     for i in range(0, 6):
  13.         t1 = threading.Thread(target=music, args=(u'爱情买卖',))
  14.         threads.append(t1)

  15.     for j in range(0, 4):
  16.         t2 = threading.Thread(target=move, args=(u'阿凡达',))
  17.         threads.append(t2)
  18.     for t in threads:
  19.         t.setDaemon(True)
  20.         t.start()
  21.     print("all over %s" % ctime())

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-15 16:40:10 | 显示全部楼层

您好,这里把每一个子线程Daemon属性设置为True了,主线程就会不等待子线程了。那不就可能会导致子线程没运行完吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-15 16:45:13 | 显示全部楼层

这里t.setDaemon(False)就可以了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-15 16:48:58 | 显示全部楼层
本帖最后由 疾风怪盗 于 2020-9-15 17:07 编辑

好像是,然后是可以在循环外增加个join(),join()的作用是,在子线程完成运行之前,这个子线程的父线程将一直被阻塞。
  1.     for t in threads:
  2.         t.setDaemon(True)
  3.         t.start()
  4.     t.join()
复制代码


join()方法的位置是在for循环外的,也就是说必须等待for循环里的两个进程都结束后,才去执行主进程。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-15 17:03:57 | 显示全部楼层
疾风怪盗 发表于 2020-9-15 16:48
好像是,然后是可以在循环外增加个join(),join()的作用是,在子线程完成运行之前,这个子线程的父线程将 ...

join()如果再for循环外,那么前面的t不就被覆盖了吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-15 17:05:34 | 显示全部楼层    本楼为最佳答案   
vcbeaut 发表于 2020-9-15 17:03
join()如果再for循环外,那么前面的t不就被覆盖了吗?

你试试效果吧,我一直是参考这篇做法来写多线程的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-15 17:09:08 | 显示全部楼层
疾风怪盗 发表于 2020-9-15 17:05
你试试效果吧,我一直是参考这篇做法来写多线程的

好的,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-27 06:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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