您好,登錄后才能下訂單哦!
這篇文章主要講解了“Python多任務是怎么發生的”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Python多任務是怎么發生的”吧!
準備工作
增加程序執行過程中細節的輸出。
單任務時執行結果
WT:<<<<WriteData:4<<<<
WT:int DataArray::addData(0)
WT:{
WT: if(m_dataSize < (ARRAY_SIZE - 1))
WT: {
WT: m_buffer[0] = 0;
WT: m_dataSize++;
WT: }
WT:}
WT:int DataArray::addData(1)
WT:{
WT: if(m_dataSize < (ARRAY_SIZE - 1))
WT: {
WT: m_buffer[1] = 1;
WT: m_dataSize++;
WT: }
WT:}
WT:int DataArray::addData(2)
WT:{
WT: if(m_dataSize < (ARRAY_SIZE - 1))
WT: {
WT: m_buffer[2] = 2;
WT: m_dataSize++;
WT: }
WT:}
WT:int DataArray::addData(3)
WT:{
WT: if(m_dataSize < (ARRAY_SIZE - 1))
WT: {
WT: m_buffer[3] = 3;
WT: m_dataSize++;
WT: }
WT:}
WT:int DataArray::addData(4)
WT:{
WT: if(m_dataSize < (ARRAY_SIZE - 1))
WT: {
WT: m_buffer[4] = 4;
WT: m_dataSize++;
WT: }
WT:}
RT:>>>>ReadData:4>>>>
RT:int DataArray::getDataSize()
RT:{
RT: return 5;
RT:}
RT::----data_size=5
RT:int DataArray::getData(0)
RT:{
RT: if(index >= 0 && index < m_dataSize)
RT: {
RT: return m_buffer[0];, value =0
RT: }
RT:}
RT:int DataArray::getData(1)
RT:{
RT: if(index >= 0 && index < m_dataSize)
RT: {
RT: return m_buffer[1];, value =1
RT: }
RT:}
RT:int DataArray::getData(2)
RT:{
RT: if(index >= 0 && index < m_dataSize)
RT: {
RT: return m_buffer[2];, value =2
RT: }
RT:}
RT:int DataArray::getData(3)
RT:{
RT: if(index >= 0 && index < m_dataSize)
RT: {
RT: return m_buffer[3];, value =3
RT: }
RT:}
RT:int DataArray::getData(4)
RT:{
RT: if(index >= 0 && index < m_dataSize)
RT: {
RT: return m_buffer[4];, value =4
RT: }
RT:}
RT:----total=10
上面的輸出只是寫五個數,讀五個數的部分,但是可以看出寫數據處理(WT)
完全結束以后,讀數據處理(RT)才開始執行。這是數據處理正確進行的必要條件,記住這一點。
多任務(線程)條件下的執行結果
RT:>>>>ReadData:WT:<<<<WriteData:0<<<<
WT:int DataArray::addData(0)
WT:{
WT: if(m_dataSize < (ARRAY_SIZE - 1))
WT: {
WT: m_buffer[0] = 0;
WT: m_dataSize++;
WT: }
WT:}
WT:int DataArray::addData(1)
WT:{
WT: if(m_dataSize < (ARRAY_SIZE - 1))
WT: {
WT: m_buffer[1] = 1;
WT: m_dataSize++;
WT: }
WT:}
WT:int DataArray::addData(2)
WT:{
WT: if(m_dataSize < (ARRAY_SIZE - 1))
WT: {
WT: m_buffer[2] = 2;
WT: m_dataSize++;
WT: }
WT:}
WT:int DataArray::addData(3)
WT:{
WT: if(m_dataSize < (ARRAY_SIZE - 1))
WT: {
WT: m_buffer[3] = 3;
WT: m_dataSize++;
WT: }
WT:}
WT:int DataArray::addData(4)
WT:{
WT: if(m_dataSize < (ARRAY_SIZE - 1))
WT: {
WT: m_buffer[4] = 4;
WT: m_dataSize++;
WT: }
WT:}
WT:<<<<WriteData:1<<<<
WT:int DataArray::addData(0)
WT:{
WT: if(m_dataSize < (ARRAY_SIZE - 1))
0>>>>
RT:int DataArray::getDataSize()
RT:{
RT: return 5;
RT:}
RT::----data_size=5
RT:int DataArray::getData(0)
RT:{
RT: if(index >= 0 && index < m_dataSize)
RT: {
RT: return m_buffer[0]RT: }
RT:}
RT:int DataArray::getData(1)
RT:{
RT: if(index >= 0 && index < m_dataSize)
RT: {
RT: return m_buffer[1]RT: }
RT:}
RT:int DataArray::getData(2)
RT:{
RT: if(index >= 0 && index < m_dataSize)
RT: {
RT: return m_buffer[2]RT: }
RT:}
RT:int DataArray::getData(3)
RT:{
RT: if(index >= 0 && index < m_dataSize)
WT: {
WT: m_buffer[5] = 0;
WT: m_dataSize++;
WT: }
WT:}
WT:int DataArray::addData(1)
WT:{
WT: if(m_dataSize < (ARRAY_SIZE - 1))
WT: {
WT: m_buffer[6] = 1;
WT: m_dataSize++;
WT: }
WT:}
如果程序可以看出寫數據處理和讀數據處理隨機交替進行,執行結果會怎么樣沒有人能說清楚。另外雖然本例中沒有涉及,如果內存關聯處理,則經常會出現內存破壞而導致死機等各種問題。而且由于任務切換的隨機性,問題的發生也是隨機的,這可能是多任務變成最大的難點。
感謝各位的閱讀,以上就是“Python多任務是怎么發生的”的內容了,經過本文的學習后,相信大家對Python多任務是怎么發生的這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。