问题:在for循环里面想同时启动多个线程,但是程序运行过程中产生的是线程一个一个启动,即:启动第一个线程之后主线程等待子线程运行完成之后才启动第二个,代码如下:
import threading
import time
def thread(num):
print("这是线程", num)
for i in range(3):
print('线程:', num, ':', i)
time.sleep(1)
def thread1(num):
print("这是线程", num)
for i in range(3):
print('线程:', num, ':', i)
time.sleep(1)
def thread3(num):
print("这是线程", num)
for i in range(3):
print('线程:', num, ':', i)
time.sleep(1)
if __name__ == '__main__':
tq = threading.Thread(target=thread(1), args=())
tq.start()
tw = threading.Thread(target=thread1(2), args=())
tw.start()
te = threading.Thread(target=thread3(3), args=())
te.start()
for i in range(10):
t = "th" + str(i)
print(t)
t = threading.Thread(target=thread(i), args=())
运行结果:
解决:
好吧,对python多线程编程语法理解甚少,参数传递问题。
tq = threading.Thread(***target=thread(1), args=()***) tw = threading.Thread(***target=thread1(2), args=()***) te = threading.Thread(***target=thread3(3), args=()***)
改为:
import threading
import time
def thread(num):
print("这是线程", num)
for i in range(3):
print('线程:', num, ':', i)
time.sleep(1)
def thread1(num):
print("这是线程", num)
for i in range(3):
print('线程:', num, ':', i)
time.sleep(1)
def thread3(num):
print("这是线程", num)
for i in range(3):
print('线程:', num, ':', i)
time.sleep(1)
if __name__ == '__main__':
tq = threading.Thread(target=thread, args=(1,))
tq.start()
tw = threading.Thread(target=thread1, args=(2,))
tw.start()
te = threading.Thread(target=thread3, args=(3,))
te.start()
T_POOL = []
for i in range(10):
t = "th" + str(i)
print(t)
t = threading.Thread(target=thread, args=(i,))
t.start()
T_POOL.append(t)
tq.join()
tw.join()
te.join()
for t in T_POOL:
t.join()
运行结果: