问题:在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()
运行结果: