⑴ python多線程global報錯
在Python的變數使用中,經常會遇到這樣的錯誤:
local variable 'a' referenced before assignment
它的稿李意思是:局鍵舉遲部變數「a」在賦答讓值前就被引用了。
比如運行下面的代碼就會出現這樣的問題:
a = 3
def Fuc():
print (a)
a = a + 1
Fuc()
但是如果把 a = a + 1 這一句刪除又不會出現上述問題了
a = 3
def Fuc():
print (a)
⑵ python一個錯誤的意思求助
python的線程中的異常,通常不會給你顯示出錯的語句。你可以將thread函數,或者是Thread的run里的內容用整個兒的try catch包裹起來。
然後這樣
import traceback,sys
try:
threadfun1()
except:
traceback.print_exc(file=sys.stdout)
這樣出錯的時候就能定位到是哪一行代碼了。
因為線程經常出現這種無顯示錯誤位置的情形。後來都形成了習慣,要不把線程放在try catch里。要不就仔細檢查線程函數,確保它沒有錯誤,再放出去運行。
另外你還好嘩蔽可以將線程函數的功能放在主友州進程里,單線程運行。這樣錯誤位置就曝露出來了。
僅僅從你蘆胡這個提示來看是無法定位錯誤的位置與類型的。
⑶ python腳本運行錯誤原因,求解!
shelve是一個對象持久化保存方法,將對象保存到文件里啟州面,一般來說對象的保存和恢復都是並螞通過shelve來進行的。
你的問題是test.txt已經存在,並且格式與shelve不符,所以提示 "db type could not be determined"
解決方法: 刪除/home/luo/python/test.txt文件,首次運行後會自動生成該文件。
另外,預設方式數據文件是二進制的,最好不要用txt結尾來誤悄蔽蔽導別人。
下面是運行結果
[zx@zx-linux test]$ ./test.py
Ener command (? for help): store
Enter unique ID number: 1
Enter name: 2
Enter age: 3
Enter phone number: 4
Ener command (? for help): quit
⑷ 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()你照著上面的寫即可.
希望可以幫到題主, 歡做虛迎追問
⑸ python多線程老是報錯。大神幫忙看看哈
你好,你具體的代碼我沒看,但單從報錯來看,你的變數名寫錯了:
你定義的是
condition = threading.Condition()
但你第10行引用的是
conditon
少了一個字母i
⑹ python threadingd多線程老是出錯
把你的代碼執行了一下,應該是有兩個地方有問題。
1、入參(u'颯颯',)這個改成(u'颯颯'.encode("utf-8"),)
2、t2=threading.Thread(target=movie,args=(u'問問')),這個地方改成
t2=threading.Thread(target=movie,args=(u'問問',))。不然會當成兩個參數。
3、第三個不確定你的用途。就是t.setDaemon(True)那個地方。調用setDaemon的時候,子線程會隨著主線程一起結束,不氏團迅管子線程是否執行完成。所以有時候會出現執行完了啥輸出都沒有的情況。如果想讓主線程等待殲此子線程,在start後面使用t.join()。這樣就會一直都有輸出了。
修改完如下:
#coding=utf-8
importthreading
fromtimeimportctime
defmusic(m):
print'在聽%s,現在是%s'%(m,ctime())
defmovie(mo):
print'在看%s,現在是%s'%(mo,ctime())
threadList=[]
t1=threading.Thread(target=music,args=(u'颯颯'.encode("utf-8"),))
threadList.append(t1)
t2=threading.Thread(target=movie,args=(u'問問'.encode("utf-8")))
threadList.append(t2)
fortinthreadList:
或茄t.setDaemon(True)
t.start()
#t.join()
⑺ python實現了多線程,如果使用了命令kill把正在運行的進程kill掉的話,可能某些線程會出錯,怎麼解決
主線程捕獲kill的信號以後去終止其他線程, 等其他線程完成以後, 再在主線程中退出.
不過更現代的實現並發的方法是使用非同步, 而不是多線程.
⑻ python為何多線程報錯,單線程沒問題
你這個是wmi在多線程中天生的問題,python的wmi的官方文檔中有說明,網頁賀配鏈接這個地址中,你仔細看「Use WMI in a thread」這一小節。
但是那個解決方案不是很好用,有些問題上還是會報錯,推薦你用wmic,禪纖指多線程中這豎雀個要好用很多。網頁鏈接
⑼ pyhon多線程無效,不知問題出現在哪裡
在python里線程出問題,可能會導致主進程崩潰。 雖然python里的線程是操作系統的真實線程。
那麼怎麼解決呢?通過我們用進程方式。子進程崩潰後,會完全的釋放所有的內存和錯誤狀態。所以進程更安全。 另外通過進程,python可以很好的繞過GIL,這個全局鎖問題。
但是進程也是有局限的。不要建立超過CPU總核數的進程,否則效率也不高。
簡單的總結一下。
當我們想實現多任務處理時,首先要想到使用multiprocessing, 但是如果覺著進程太笨重,那麼就要考慮使用線程。 如果多任務處理中需要處理的太多了,可以考慮多進程,每個進程再採用多線程。如果還處理不要,就要使用輪詢模式,比如使用poll event, twisted等方式。如果是GUI方式,則要通過事件機制,或者是消息機制處理,GUI使用單線程。
所以在python里線程不要盲目用, 也不要濫用。 但是線程不安全是事實。如果僅僅是做幾個後台任務,則可以考慮使用守護線程做。如果需要做一些危險操作,可能會崩潰的,就用子進程去做。 如果需要高度穩定性,同時並發數又不高的服務。則強烈建議用多進程的multiprocessing模塊實現。
在linux或者是unix里,進程的使用代價沒有windows高。還是可以接受的。
⑽ python運行錯誤TypeError: unsupported operand type(s) for -: 'str' and 'str'
python 錯誤提示手宏旁TypeError: unsupported operand type(s) for //: 'str' and 'int'是設置錯誤造成的,解決方法為;
1、圖片中沒有定義numi但是print函數裡面用了所以出現命令錯誤。