python多线程怎么用?
python一般多线程是用import thread还是import threading?
然后,怎么让主程序等待所有子线程运行完才结束? 本帖最后由 疾风怪盗 于 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())
疾风怪盗 发表于 2020-9-15 16:22
参考一下
您好,这里把每一个子线程Daemon属性设置为True了,主线程就会不等待子线程了。那不就可能会导致子线程没运行完吗? 疾风怪盗 发表于 2020-9-15 16:22
参考一下
这里t.setDaemon(False)就可以了 本帖最后由 疾风怪盗 于 2020-9-15 17:07 编辑
好像是,然后是可以在循环外增加个join(),join()的作用是,在子线程完成运行之前,这个子线程的父线程将一直被阻塞。
for t in threads:
t.setDaemon(True)
t.start()
t.join()
join()方法的位置是在for循环外的,也就是说必须等待for循环里的两个进程都结束后,才去执行主进程。 疾风怪盗 发表于 2020-9-15 16:48
好像是,然后是可以在循环外增加个join(),join()的作用是,在子线程完成运行之前,这个子线程的父线程将 ...
join()如果再for循环外,那么前面的t不就被覆盖了吗? vcbeaut 发表于 2020-9-15 17:03
join()如果再for循环外,那么前面的t不就被覆盖了吗?
你试试效果吧,我一直是参考这篇做法来写多线程的 疾风怪盗 发表于 2020-9-15 17:05
你试试效果吧,我一直是参考这篇做法来写多线程的
好的,谢谢
页:
[1]