python 有关多线程的问题,哭了
本帖最后由 zx2000 于 2019-10-18 21:01 编辑刚刚学习多线程,碰到了一个问题:
我想批量创建3个线程,并且同时start。
3个线程结束后,再次创建3个线程并且同时start。
3个线程结束后,再次创建3个线程并且同时start。
3个线程结束后,再次创建3个线程并且同时start。
这样循环10次。
但是这个代码写出来后,是直接for循环10次,然后同时一下子创建了30个线程。
怎样创建3个线程后,待3个线程都结束了,才开始循环下一次?
import time
import threading
def test(strs):
time.sleep(5)
print("这是由第"+str(strs+1)+"号线程执行的")
if __name__ == '__main__':
for j in range(10):
li=[];
for i in range(3):
th=threading.Thread(target=test,args=(str(i)),)
li.append(th)
for th in li:
th.start();
print("程序运行了"+str(j)+"次")
线程对象有一个join方法,使得线程成为堵塞的线程,看我的代码.
import time
import threading
def test(strs):
time.sleep(5)
print("这是由第" + str(strs + 1) + "号线程执行的")
if __name__ == '__main__':
for j in range(10):
li = []
for i in range(3):
th = threading.Thread(target=test, args=(i,) )
li.append(th)
th.start()
for th in li:
th.join()
print("程序运行了" + str(j) + "次") 加个变量 判断一下比如线程启动i=3就不执行创建线程 等线程结束的时候 去 i-- 然后就能继续创建线程了 本帖最后由 15774211127 于 2019-10-18 20:47 编辑
把循环单独提取成一个方法,有一个参数(用来接收还剩余没生成的线程组数,比如你刚开始是10,如果为0直接退出)
然后新建一个全局变量等于当前次数生成的线程数
每个线程执行完毕全局变量减1,并且判断全局变量是否等于0,如果等于就(将剩余没生成的线程组数减1,再调用一次生成线程的方法)
大概就是下面这样(手写的没测试)
import time
import threading
count = 0;
def test(strs, sum):
time.sleep(5)
print("这是由第"+str(strs+1)+"号线程执行的")
count--
if count==0:
generate(sum - 1)
def generate(sum):
if sum <= 0:
return
li=[];
for i in range(3):
th=threading.Thread(target=test,args=(str(i), sum),)
li.append(th)
count = len(li)
for th in li:
th.start();
if __name__ == '__main__':
generate(10);
用python线程池啊,他不会释放线程,而是归还线程。
https://www.cnblogs.com/zhang293/p/7954353.html 2楼正解3楼牛逼 4楼大神 而我还没你会的多。 15774211127 发表于 2019-10-18 20:38
把循环单独提取成一个方法,有一个参数(用来接收还剩余没生成的线程组数,比如你刚开始是10,如果为0直接 ...
5楼用的join方法比较简单,也成功了。不过还得感谢大佬出手相助{:301_993:} 邓大侠 发表于 2019-10-18 20:51
线程对象有一个join方法,使得线程成为堵塞的线程,看我的代码.
import time
import threading
成功!感谢大佬出手相助!!!{:301_993:} 有一个阻塞的函数 线程池是最佳选择4楼正解
页:
[1]
2