Python多任务(多线程执行带有参数的任务,利用threading创建线程时传入参数--args参数和kwargs参数)
?
1.多線程執行帶有參數的任務
以元組形式傳參
以字典方式進行傳參? ? ? ?(字典的key值和參數名要一致)
2.線程的注意點
線程之間執行是無序的
主線程會等待所有的子線程執行結束再結束
如果要主線程不等待子線程結束再結束,可以把子線程設置為守護線程,?主線程退出后子線程直接銷毀。
線程之間共享全局變量
如果想讓? 添加數據的子線程執行完之后再執行讀取數據的代碼??join()方法,線程等待,
1.多線程執行帶有參數的任務
? ?Thread?類執行任務并給任務傳參數有兩種方式:
- args:? ? ?指定將來調用 函數的時候? ?傳遞什么數據過去
? ? ? ? ? ? ? ? ??args參數指定的一定是一個元組類型 - kwargs?表示以字典方式給執行任務傳參
-
以元組形式傳參
結果:
?-----in test1 temp=[1, 2, 33]-----
-----in test2 temp=[1, 2, 33]-----
-----in main temp=[1, 2, 33]-----
-
以字典方式進行傳參? ? ? ?(字典的key值和參數名要一致)
運行結果:
eating :爆米花 number :1
watch : 電影 type:科幻
?
2.線程的注意點
-
線程之間執行是無序的
?通過下方的運行結果可以看出,? ?線程之間的執行確實是無序的,具體哪個線程執行是由cpu調度決定的
-
主線程會等待所有的子線程執行結束再結束
?運行結果:? 子線程一直會執行,主線程會等待子線程結束再結束
-
如果要主線程不等待子線程結束再結束,可以把子線程設置為守護線程,?主線程退出后子線程直接銷毀。
? ? 第一種方式:??daemon=True
# daemon=True 表示創建的子線程守護主線程,主線程退出子線程直接銷毀sub_thread = threading.Thread(target=task, daemon=True)第二種方式:setDaemon(True)
sub_thread = threading.Thread(target=task)sub_thread.setDaemon(True)sub_thread.start()-
線程之間共享全局變量
運行結果:? 可以共同訪問一個變量
-
如果想讓? 添加數據的子線程執行完之后再執行讀取數據的代碼??join()方法,線程等待,
? join()方法,線程等待(線程同步的一種方式,保證同一時刻只能有一個線程去操作全局變量,同步就是按照預先的先后次序進行運行,比如現實生活中的對講機,你說完,我再說),讓第一個線程執行完之后再執行第二個線程,保證數據不會有問題
add_thread.start()add_thread.join()read_thread.start()總結
以上是生活随笔為你收集整理的Python多任务(多线程执行带有参数的任务,利用threading创建线程时传入参数--args参数和kwargs参数)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python多任务(2.线程的概念以及组
- 下一篇: Python多任务(3.线程--多线程共