導航:首頁 > 編程語言 > python重啟線程

python重啟線程

發布時間:2022-11-12 15:48:36

A. python 線程結束之後怎麼再重新啟動

給出一個簡單的線程互斥的例子,例子中同時啟動兩個線程,a線程獲取鎖,獲取後b線程處於等待狀態,只有a線程釋放鎖,才能進入b線程。代碼如下:
import threading
import time
def hello(name):
print(name + ' started')
lock.acquire(True)
time.sleep(50)
print(name + ' running')
lock.release()
print(name + ' exit')
lock = threading.Lock()
a = threading.Thread(target=hello,args='a')
b = threading.Thread(target=hello,args='b')
a.start()
b.start()

B. python 在線程函數中如何實現線程的暫停、恢復和終止

我們都知道python中可以是threading模塊實現多線程, 但是模塊並沒有提供暫停, 恢復和停止線程的方法, 一旦線程對象調用start方法後, 只能等到對應的方法函數運行完畢. 也就是說一旦start後, 線程就屬於失控狀態. 不過, 我們可以自己實現這些. 一般的方法就是循環地判斷一個標志位, 一旦標志位到達到預定的值, 就退出循環. 這樣就能做到退出線程了. 但暫停和恢復線程就有點難了, 我一直也不清除有什麼好的方法

C. Python 中的input()方法是不是重新起了一個線程

input不會新啟動線程,它是對sys.stdin.readline的一個封裝
你看到多出的線程都是你自己啟動的。
join(5),並不能在5秒後把線程幹掉,而是說等5秒鍾,無論線程是否結束,都會返回。
然而線程被阻塞在input處,除非有回車或者EOF,input才能返回,線程才能結束。
這就是你看到線程逐漸堆積的原因。
這里不要用線程,線程只會帶來麻煩。可以考慮用select模塊,它監視一些文件是否可讀/可寫/發生錯誤(當然這里也包括標准輸入文件),並且返回這些文件的list;同時它支持超時,超時返回時,返回的list是空的,這說明小孩並沒有在指定時間內輸入任何答案。

D. python循環怎麼用多線程去運行

import threading
def fun1(func):
func.start() #啟動線程2
for i in range(5):
print 'x',i
func.join()
fun2()

def fun2():
for i in range(60):
print 'y',i

tfunc2=threading.Thread(target=fun2)
tfunc1=threading.Thread(target=fun1,args=(tfunc2,))
tfunc1.start() #啟動線程1

E. Python中級精華-並發之啟動和停止線程

為了讓代碼能夠並發執行,向創建線程並在核實的時候銷毀它。

由於目的比較單純,只是講解基礎的線程創建方法,所以可以直接使用threading庫中的Thread類來實例化一個線程對象。

例子,用戶輸入兩個數字,並且求其兩個數字的四則運算的結果:

除了以上的一些功能以外,在python線程

中沒有其他的諸如給線程發信號、設置線程調度屬性、執行任何其他高級操作的功能了,如果需要這些功能,就需要手工編寫了。

另外,需要注意的是,由於GIL(全局解釋器鎖)的存在,限制了在python解釋器當中只允許運行一個線程。基於這個原因,不停該使用python線程來處理計算密集型的任務,因為在這種任務重我們希望在多個CPU核心上實現並行處理。Python線程更適合於IO處理以及設計阻塞操作的並發執行任務(即等待IO響應或等待資料庫取出結果等)。

如何判斷線程是否已經啟動?

目的:我們載入了一個線程,但是想要知道這個線程什麼時候才會開始運行?

方法:

線程的核心特徵我認為就是不確定性,因為其什麼時候開始運行,什麼時候被打斷,什麼時候恢復執行,這不是程序員能夠控制的,而是有系統調度

來完成的。如果遇到像某個線程的運行依託於其他某個線程運行到某個狀態時該線程才能開始運行,那麼這就是線程同步

問題,同樣這個問題非常棘手。要解決這類問題我們要藉助threading中的Event對象。

Event其實和條件標記類似,勻速線程

等待某個時間發生。初始狀態時事件被設置成0。如果事件沒有被設置而線程正在等待該事件,那麼線程就會被阻塞,直到事件被設置位置,當有線程設置了這個事件之後,那麼就會喚醒正在等待事件的線程,如果線程等待的事件已經設置了,那麼線程會繼續執行。

一個例子:

如上能夠確定的是,主線程會在線程t運行結束時再運行。

F. Python中如何在代碼中主動開啟線程

首先先定義線程,然後對象.start(),如果是線程池先定義線程池,給線程池分配任務他就運行了

G. 請教python如何開啟多線程

可以定義函數把這些代碼放在不同的函數里,然後threading模塊
import threading
th1 = threading.Thread(target=func1, args=(arg1, arg2, ...))
照這樣再定義別的線程,開啟用Thread類的start方法
th1.start(); th2.start(); ...

H. 在Python中重新啟動一個線程問題,怎麼解決

給出一個簡單的線程互斥的例子,例子中同時啟動兩個線程,a線程獲取鎖,獲取後b線程處於等待狀態,只有a線程釋放鎖,才能進入b線程。代碼如下:

importthreading
importtime
defhello(name):
print(name+'started')
lock.acquire(True)
time.sleep(50)
print(name+'running')
lock.release()
print(name+'exit')
lock=threading.Lock()
a=threading.Thread(target=hello,args='a')
b=threading.Thread(target=hello,args='b')
a.start()
b.start()

I. Python多線程的一些問題

python提供了兩個模塊來實現多線程thread 和threading ,thread 有一些缺點,在threading 得到了彌補,為了不浪費你和時間,所以我們直接學習threading 就可以了。
繼續對上面的例子進行改造,引入threadring來同時播放音樂和視頻:
#coding=utf-8import threadingfrom time import ctime,sleepdef music(func): for i in range(2): print "I was listening to %s. %s" %(func,ctime())
sleep(1)def move(func): for i in range(2): print "I was at the %s! %s" %(func,ctime())
sleep(5)

threads = []
t1 = threading.Thread(target=music,args=(u'愛情買賣',))
threads.append(t1)
t2 = threading.Thread(target=move,args=(u'阿凡達',))
threads.append(t2)if __name__ == '__main__': for t in threads:
t.setDaemon(True)
t.start() print "all over %s" %ctime()

import threading
首先導入threading 模塊,這是使用多線程的前提。

threads = []
t1 = threading.Thread(target=music,args=(u'愛情買賣',))
threads.append(t1)
創建了threads數組,創建線程t1,使用threading.Thread()方法,在這個方法中調用music方法target=music,args方法對music進行傳參。 把創建好的線程t1裝到threads數組中。
接著以同樣的方式創建線程t2,並把t2也裝到threads數組。

for t in threads:
t.setDaemon(True)
t.start()
最後通過for循環遍歷數組。(數組被裝載了t1和t2兩個線程)

setDaemon()
setDaemon(True)將線程聲明為守護線程,必須在start() 方法調用之前設置,如果不設置為守護線程程序會被無限掛起。子線程啟動後,父線程也繼續執行下去,當父線程執行完最後一條語句print "all over %s" %ctime()後,沒有等待子線程,直接就退出了,同時子線程也一同結束。

start()
開始線程活動。

運行結果:
>>> ========================= RESTART ================================
>>> I was listening to 愛情買賣. Thu Apr 17 12:51:45 2014 I was at the 阿凡達! Thu Apr 17 12:51:45 2014 all over Thu Apr 17 12:51:45 2014

從執行結果來看,子線程(muisc 、move )和主線程(print "all over %s" %ctime())都是同一時間啟動,但由於主線程執行完結束,所以導致子線程也終止。

繼續調整程序:
...if __name__ == '__main__': for t in threads:
t.setDaemon(True)
t.start()

t.join() print "all over %s" %ctime()

我們只對上面的程序加了個join()方法,用於等待線程終止。join()的作用是,在子線程完成運行之前,這個子線程的父線程將一直被阻塞。
注意: join()方法的位置是在for循環外的,也就是說必須等待for循環里的兩個進程都結束後,才去執行主進程。
運行結果:
>>> ========================= RESTART ================================
>>> I was listening to 愛情買賣. Thu Apr 17 13:04:11 2014 I was at the 阿凡達! Thu Apr 17 13:04:11 2014I was listening to 愛情買賣. Thu Apr 17 13:04:12 2014I was at the 阿凡達! Thu Apr 17 13:04:16 2014all over Thu Apr 17 13:04:21 2014

從執行結果可看到,music 和move 是同時啟動的。
開始時間4分11秒,直到調用主進程為4分22秒,總耗時為10秒。從單線程時減少了2秒,我們可以把music的sleep()的時間調整為4秒。
...def music(func): for i in range(2): print "I was listening to %s. %s" %(func,ctime())
sleep(4)
...

子線程啟動11分27秒,主線程運行11分37秒。
雖然music每首歌曲從1秒延長到了4 ,但通多程線的方式運行腳本,總的時間沒變化。

閱讀全文

與python重啟線程相關的資料

熱點內容
安卓源碼編譯輸入腳本沒反應 瀏覽:44
phpmysql自增 瀏覽:166
把ppt保存為pdf 瀏覽:533
汽車密封件加密配件 瀏覽:887
黑馬程序員15天基礎班 瀏覽:560
java調整格式 瀏覽:521
香港雲伺服器租用價 瀏覽:78
linuxsublime3 瀏覽:560
imac混合硬碟命令 瀏覽:277
沈陽用什麼app租房車 瀏覽:857
00後高中生都用什麼app 瀏覽:237
戴爾塔式伺服器怎麼打開獨立顯卡 瀏覽:807
醫療程序員招聘 瀏覽:597
住宿app可砍價是什麼意思 瀏覽:133
java跳出語句 瀏覽:55
javastring個數 瀏覽:928
人工免疫演算法應用 瀏覽:79
有什麼app能收聽俄羅斯廣播電台 瀏覽:34
2015考研紅寶書pdf 瀏覽:443
程序員幾月跳槽合適 瀏覽:444