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