简易示例
from threading import Thread
import time
def run(aa):
time.sleep(2)
print(f'{aa} is running')
t = Thread(target=run, args=('aa',))
t.start()
t.join() #子线程执行完才会继续往下走
print('主线程')
---------------
aa is running
主线程
多并发
import time
start_time = time.time() # 记录程序开始时间
from threading import Thread
import time
def run(aa):
time.sleep(2)
print(f'{aa} is running')
thread_list = []
for i in range(7):
param = "a_{}".format(i)
t = Thread(target=run, args=(param,))
t.start()
thread_list.append(t)
for t in thread_list:
t.join()
print('主线程')
end_time = time.time() # 记录程序结束时间
tim = round((end_time - start_time),2)
print("程序运行时间为", tim, "秒")
---------------
a_0 is running
a_2 is running
a_3 is running
a_4 is running
a_1 is running
a_5 is running
a_6 is running
主线程
程序运行时间为 2.0 秒
多并发写文件
from threading import Thread
def run(aa):
fil_name = f"a_{aa%2}.txt"
with open(fil_name,'a') as f:
f.write(f'{aa} \n')
thread_list = []
for i in range(7):
t = Thread(target=run, args=(i,))
t.start()
thread_list.append(t)
for t in thread_list:
t.join()
数据通过参数流入各个线程,
各个线程处理参数数据
在主线程中等待子线程执行完毕
在数据量大时,"同时"创建这么多线程也不好,优化一下
from threading import Thread
def run(aa):
fil_name = f"a_{aa%2}.txt"
with open(fil_name,'a') as f:
f.write(f'{aa} \n')
batch_size=7
thread_list = []
for i in range(700):
t = Thread(target=run, args=(i,))
t.start()
thread_list.append(t)
if i%batch_size == batch_size-1: #每个小批次并发一次,然后清空
for t in thread_list:
t.join()
thread_list=[]
随手优化了一下,有点线程池的味道了,就这样了,能不用Python线程还是别用了
如果要用,最好不要用它处理共享资源,python线程性能不佳...
参考文章
Python 线程
Python多线程使用详解