今天寫了一下多執行緒指令碼,準備跑個測試。結果螢幕輸出的列印資訊看的我直頭暈。只好寫個簡單的,只有三個執行緒的指令碼,看看發生了什麼。
然後我就明白了,同時向乙個終端,比如乙個idle裡面輸出列印資訊,也是利用cpu的時間片。雖然由於gil的存在,python只能利用乙個核,但是,依然會按照時間分片進行指令的操作。
把資訊輸出到文字檔案裡,看起來就正常了。
**如下:
import threading,time
class mythread(threading.thread):
def __init__(self,threadname):
threading.thread.__init__(self, name=threadname)
def run(self):
f_name = str(self.getname()) + '.txt'
f = file(f_name, 'a')
for i in range(1,11):
print self.getname() ," ", i
time.sleep(1)
msg = str(self.getname())+ " "+str(i)+ '\n'
f.write(msg)
f.close()
if __name__ == '__main__':
for i in range(1,4):
t_name = 'thread' + str(i)
obj = mythread(t_name)
obj.start()
time.sleep(1)
print obj
如果只看idle,那麼列印資訊是亂成這樣的:
thread1 1
thread1
thread2 2
1thread3 1
thread1thread2 32
thread3
thread1
>>> thread2 2 4 3
thread3thread1 35
thread2 4
thread3thread1 46
thread2 5
thread3thread1 57
thread2 6
thread1thread3 86
thread2 7
thread1 9
thread2thread3 87
thread1thread2 109thread3
8thread2 10
thread3 9
thread3 10
如果再看生成的thread1.txt, thread2.txt , thread3.txt文字檔案,裡面就是正常的了。
串列埠列印資訊的奇怪問題
遇到的問題 自己解決加入串列埠列印資訊碰到了鬱悶的事情。剛開始,我只想把c wince500 public common oak drivers serial com mdd2編譯成debug版本,來列印資訊的。我採用了如下方法 第一種 將下面這句 加入到驅動所在目錄中的sources檔案中即可 c...
ACE TRACE main 不列印資訊的原因
我們知道ace日誌巨集是否產生日誌方法呼叫,由三個配置在編譯時的值決定 ace ntrace ace ndebug,以及ace nlogging。要啟用相應的日誌巨集,需要定義相應的巨集。ace ntrace預設為1 禁用 ace ndebug和ace nlogging預設為未定義 啟用 通過在包含...
WinCE BSP中列印資訊的實現介紹
不管在wince5.0還是在wince6.0中,我們在除錯驅動或者應用的時候都會用到列印函式。在驅動裡面,我們可能會用debugmsg retailmsg 還有nkdbgprintfw 在我們使用這些列印函式除錯我們的程式之前,我們需要實現串列埠列印功能。在wince的bsp中,如果想呼叫debug...