當前位置:首頁 » 編程語言 » python線程異常

python線程異常

發布時間: 2022-12-19 19:42:04

『壹』 python 線程問題

參數傳遞有問題。有三種傳遞方式,可以去網上查一下即知。這里修改一下:
#...
#use tuple to pass parameter
t1=threading.Thread(target=albaba,args=(x))
t1.start()

t2=threading.Thread(target=albaba,args=(y))
t2.start()
#...

『貳』 python子線程崩潰會影響主線程么

會的。
當一個進程啟動之後,會默認產生一個主線程,因為線程是程序執行的最小單位,當設置多線程時,主線程會創建多個子線程,在Python中,默認情況下就是setDaemon(False),主線程執行完自己的任務以後,就退出了,此時子線程會繼續執行自己的任務,直到自己的任務結束。
Python是一種廣泛使用的解釋型、高級和通用的編程語言。Python由荷蘭數學和計算機科學研究學會的GuidovanRossum創造,第一版發布於1991年,它是ABC語言的後繼者,也可以視之為一種使用傳統中綴表達式的LISP方言。Python提供了高效的高級數據結構,還能簡單有效地面向對象編程。

『叄』 python中主線程怎樣捕獲子線程的異常

最近因為別的需求,寫了一個模塊,似乎在這里能用得上:

https://github.com/SakuraSa/ChatProcess


其中的 example.py :

#!/usr/bin/envpython
#coding=utf-8

"""
example
"""

__author__='Rnd495'

fromtimeimportsleep
fromChatProcessimportChatroom


classEcho(Chatroom):
"""
Echo
"""
defresponse(self,data):
ifdata.startswith('sleep'):
sec=float(data[6:])
sleep(sec)
return'wakeupafter%dms'%(sec*1000)
elifdata:
returndata
else:
self.stop()
return'goodbye'


if__name__=='__main__':
,ProcessError

print'process01:'
e=Echo.create_process(lifetime=1).start()
printe.chat('Helloworld!'),e.remain
printe.chat('sleep:0.1'),e.remain
printe.chat(''),e.remain

print''
print'process02:'
e=Echo.create_process(lifetime=1).start()
try:
printe.chat('Helloworld!'),e.remain
printe.chat('sleep:1.0'),e.remain
printe.chat(''),e.remain
exceptTimeoutError,error:
print'error:',error

print''
print'process03:'
e=Echo.create_process(lifetime=1).start()
try:
printe.chat('Helloworld!'),e.remain
printe.chat('sleep:notanum'),e.remain
printe.chat(''),e.remain
exceptProcessError,error:
print'error:',error


運行結果為:

process01:
Helloworld!0.773000001907
wakeupafter100ms0.549000024796
goodbye0.547000169754

process02:
Helloworld!0.868000030518
error:TimeoutError

process03:
Helloworld!0.868000030518
error:('Erroroccurredonloop',ValueError('couldnotconvertstringtofloat:notanum',))


在其中的 process01 中,主進程捕獲了 超時

在其中的 process02 中,主進程捕獲了 子進程的錯誤


不知道你能不能用得上

『肆』 python多線程的問題如何處理

在python里線程出問題,可能會導致主進程崩潰。 雖然python里的線程是操作系統的真實線程。

那麼怎麼解決呢?通過我們用進程方式。子進程崩潰後,會完全的釋放所有的內存和錯誤狀態。所以進程更安全。 另外通過進程,python可以很好的繞過GIL,這個全局鎖問題。

但是進程也是有局限的。不要建立超過CPU總核數的進程,否則效率也不高。

簡單的總結一下。
當我們想實現多任務處理時,首先要想到使用multiprocessing, 但是如果覺著進程太笨重,那麼就要考慮使用線程。 如果多任務處理中需要處理的太多了,可以考慮多進程,每個進程再採用多線程。如果還處理不要,就要使用輪詢模式,比如使用poll event, twisted等方式。如果是GUI方式,則要通過事件機制,或者是消息機制處理,GUI使用單線程。

所以在python里線程不要盲目用, 也不要濫用。 但是線程不安全是事實。如果僅僅是做幾個後台任務,則可以考慮使用守護線程做。如果需要做一些危險操作,可能會崩潰的,就用子進程去做。 如果需要高度穩定性,同時並發數又不高的服務。則強烈建議用多進程的multiprocessing模塊實現。

linux或者是unix里,進程的使用代價沒有windows高。還是可以接受的。

『伍』 python多線程運行過程中出現奇怪的等待行為

你這個程序問題在new = Thread( self.subfunc(i) ) 傳進去的時候就已經調用了self.subfunc
改成 new = Thread( target=self.subfunc, args=(i,) )

另外i 數字太小也看不出來,因為工作量太小,在線程的一個時間片內函數就執行完了,看不到切換的過程,設成if i>10000就明顯了

『陸』 python多線程老是報錯。大神幫忙看看哈

你好,你具體的代碼我沒看,但單從報錯來看,你的變數名寫錯了:
你定義的是
condition = threading.Condition()
但你第10行引用的是
conditon
少了一個字母i

『柒』 Python ThreadPoolExecutor 異常中止解決方案

通常情況,我們利用 Ctrl+C 讓程序觸發 KeyboardInterrupt 異常,中止程序運行。線程池方案下, Ctrl-C 失效,當線程池裡的線程任務跑完後,才會觸發 KeyboardInterrupt

上下文管理協議相當於隱性地省略了 threadPool.shutdown(wait=True) ,同時,程序正常執行完成或出現異常中斷的時候,就會調用 __exit__() 方法,接下來進行異常中止的基礎。

適用於 Django 等 WEB 應用框架,本身自帶多線程,修改全局變數簡單,但要注意線程安全。

程序運行中,只需 sign = 1 或者 exiting.set() ,worker 函數則跳過主要運算部分,剩餘線程任務將迅速完成,變相達到中止多線程任務的目的。

提交給線程池的每個線程任務 task 加入 threadPool 中,方便後續對 task 進行操作。當 for 循環內的 task 全部提交後,線程會再後台運行,而進程運行至 while 中堵塞,直至 threadPool 中最後一個線程是否 .done() 。若進程堵塞在 while 中接收到 Ctrl+C KeyboardInterrupt 異常,則從後往前取消 threadPool 中所有任務,達到中止目的。

『捌』 python捕獲所有異常怎麼寫 python中捕獲線程拋出的異常

except (IDontLIkeYouException, YouAreBeingMeanException) as e:pass用逗號分割的方法只能在Python2.6和2.7里好使,在Python3中則無效;

『玖』 python中的多線程為什麼會報錯

題主你好,
你的問題在於threading模式的Thread()類使用的不正確,你代碼中的代碼為:
t1 = threading.Thread(target=name_b, name="job2")
其中name_b是你定義的函數名, 其實光看語句本身是沒錯的,但問題出在:
" name_b這個函數定義中有兩個參數,你沒有在Thread()類中給name_b傳參 "
你想一下,如果不考慮多線程,你去調用name_b這個函數,光寫個:
name_b() 肯定是不對的
你要將os_name2和url_b這兩個參數也帶上才行,即:
name_b(xxx, yyy)

所以就你當前代碼報錯信息要改的話, 只需要在兩個threading.Thread()中再加一個args參數,將傳給函數的參數代碼寫在" () "中, 即:
threading.Thread(target=name_b, name="job2", args=(xxx, yyy))
另一個threading.Thread()你照著上面的寫即可.
希望可以幫到題主, 歡迎追問

熱點內容
編程算損耗 發布:2025-01-28 03:33:03 瀏覽:456
sql存儲過程返回多個結果 發布:2025-01-28 03:24:03 瀏覽:462
長安歐尚科賽哪個配置值得購買 發布:2025-01-28 03:19:35 瀏覽:115
c全排列演算法 發布:2025-01-28 03:18:16 瀏覽:753
梵蒂岡頂級時裝ftp 發布:2025-01-28 03:03:36 瀏覽:694
手游腳本有前途嗎 發布:2025-01-28 02:46:55 瀏覽:379
抓包編程 發布:2025-01-28 02:42:41 瀏覽:930
安卓平板上怎麼設置熱點 發布:2025-01-28 02:36:33 瀏覽:717
如何在手機上壓縮圖片 發布:2025-01-28 02:34:09 瀏覽:989
伺服器ip掛上公網 發布:2025-01-28 02:31:15 瀏覽:978