鱼C论坛

 找回密码
 立即注册
查看: 1460|回复: 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不就被覆盖了吗?

你试试效果吧,我一直是参考这篇做法来写多线程的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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


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


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


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

    for j in range(0, 4):
        t2 = threading.Thread(target=move, args=(u'阿凡达',))
        threads.append(t2)
    for t in threads:
        t.setDaemon(True)
        t.start()
    print("all over %s" % ctime())
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

您好,这里把每一个子线程Daemon属性设置为True了,主线程就会不等待子线程了。那不就可能会导致子线程没运行完吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

这里t.setDaemon(False)就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

join()方法的位置是在for循环外的,也就是说必须等待for循环里的两个进程都结束后,才去执行主进程。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

join()如果再for循环外,那么前面的t不就被覆盖了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你试试效果吧,我一直是参考这篇做法来写多线程的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

好的,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-18 16:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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