简易示例

 
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多线程使用详解