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