天天看點

程序和線程的差別以及線程隊列

"""
程序和線程的差別:
1.程序:每個程式都會有一個程序,負責管理程式各個功能的執行,程序隻會有一個
       而且至少有一個(相當于包工頭)
2.線程:每個程序裡面至少有一個線程,稱之為主線程,除此以外還會有其他線程,稱之為分線程
        線程是控制任務執行的最小機關(相當于農民工)
3.程序負責控制各個線程的執行,當程式運作,程序啟動,程式關閉,程序結束
"""
"""
主線程和分線程:
1.代碼運作預設都是在主線程裡面,如果需要執行新的任務,可以開辟分線程
2.分線程個數沒有限制,分線程裡面的任務結束後,分線程結束

分線程的使用場景:
1.當有大量任務需要執行的時候,可以将任務放入到分線程裡面
2.當有大量任務需要執行的時候,而任務的執行順序需要指定的時候,可以使用分線程
3.當界面有大量效果(UI界面)需要更新的時候,需要放入到分線程
"""
"""
同步任務:上一個任務沒有完成,下一個任務不能開始執行
異步任務:可以同時執行多個任務,上一個任務沒有完成,下一個任務也可以開始執行
分線程和異步的差別:
1.分線程可以同時開啟多個任務,所有的任務自己完成
2.異步可以同時開啟多個任務,但是自己隻做一個任務,其他任務指令其他人來完成
"""
# python裡面有兩個負責線程子產品,thread,threading
# threading在thread子產品基礎之上做了擴充
# thread線程
import threading
# 擷取目前線程的名稱     Main主要的     MainThread主線程
print('目前線程為',threading.current_thread().name)
def myThread():
    print('位置1',threading.current_thread().name)
    print('位置2', threading.current_thread().name)
    print('位置3', threading.current_thread().name)
    print('位置4', threading.current_thread().name)
    print('位置5', threading.current_thread().name)
    print('位置6', threading.current_thread().name)


class People(object):
    def thread_test(self):
        print('對象方法',threading.current_thread().name)

p = People()
p.thread_test()
# threading.Thread開辟一個新的線程   target目标     name分線程名稱
#開始執行分線程
sub_thread = threading.Thread(target=myThread,name='newThread')
sub_thread.start()
# 確定任務的執行順序,自己的現場呢過先完成,之後再執行其他線程
sub_thread.join()
#當程式運作時,會在主線程中執行(因為在程式剛開始的時候
# 隻有主線程,沒有分線程 )
# 人後會根據情況進入到分線程,主線程和分線程的任務是交叉進行的,
# (因為是兩條路)自己線程的執行情況不會影響對方線程
# 是以感覺是交叉的
# 分線程代碼結束以後沒會回歸到主線程
print('outsidel',threading.current_thread().name)
print('outside2',threading.current_thread().name)
print('outside3',threading.current_thread().name)
print('outside4',threading.current_thread().name)
print('outside5',threading.current_thread().name)      
# queue隊列
import queue
#建立一個線程隊列
# 隊列:FIFO first in first out  先進先出
q = queue.Queue()
for i in range(5):
    #将内容放入到線程隊列中
    q.put(i)
while not q.empty():
    # get得到
    print(q.get())
# LIFO last in  forst out 後進先出
p = queue.LifoQueue()
for i in range(5):
    p.put(i)
while not p.empty():
    print(p.get())