#1、多线程函数 import threading threading.active_count() #当前正在激活的线程有几个 threading.enumerate();#当前正激活的线程集合 threading.current_thread();#当前位置是被哪个线程在跑 #2、基本使用 import threading from time import sleep def test(): print("start \n" ) sleep(1) print("end\n") def test2(): print("start2\n") print("end2\n") def main(): add_thread = threading.Thread(target=test,name='thread1') #name线程名字,tartget要做的事情 add_thread2 = threading.Thread(target=test2,name='thread2') #name线程名字,tartget要做的事情 add_thread.start() add_thread2.start() add_thread.join() #当前进程完成后才会执行后续操作 add_thread2.join()#当前进程完成后才会执行后续操作 ,1与2 同时进行,虽然2在1后面执行,但是2用时少 ,先完成 print("all done\n") if __name__ == '__main__': main() #3、多线程处理数据 import threading from queue import Queue #任务函数 def computed(datalist,q): for key in range(len(datalist)): datalist[key] = datalist[key] ** 2 q.put(datalist) #主函数 def main(): q = Queue() data = [[1,2,3],[2,3,4],[3,4,5],[4,5,6]] threadList = [] for i in range(4): t = threading.Thread(target = computed,args=(data[i],q)) t.start() threadList.append(t) for thread in threadList: thread.join() result = [] for datalist in range(4): result.append(q.get()) print(result) if __name__ == '__main__': main() #4、锁(线程一整个单元执行完以后,线程二才执行否则等待) import threading from queue import Queue def jobOne(): global A,lock lock.acquire() for i in range(10): A += 1 print('jobOne',A) lock.release() def jobTwo(): global A,lock lock.acquire() for i in range(10): A += 10 print('jobTwo',A) lock.release() def main(): tOne = threading.Thread(target = jobOne) tTwo = threading.Thread(target = jobTwo) tOne.start() tTwo.start() tOne.join() tTwo.join() print('all end') if __name__ == '__main__': A = 0 lock = threading.Lock() main() #5、threading.local:声明多线程内部的局部变量,各个线程之间的变量不影响 import threading # 创建全局 ThreadLocal 对象: local_school = threading.local() def process_student(): # 获取当前线程关联的 student: std = local_school.student print('Hello, %s (in %s)' % (std, threading.current_thread().name)) def process_thread(name): # 绑定 ThreadLocal 的 student: local_school.student = name #每个local_school.student都是独立的 process_student() t1 = threading.Thread(target= process_thread, args=('Alice',), name='Thread-A') t2 = threading.Thread(target= process_thread, args=('Bob',), name='Thread-B') t1.start() t2.start() t1.join() t2.join()
python单核多线程
最新推荐文章于 2023-08-21 20:06:59 发布