1

我正在研究包含始終具有條件爲True的while循環的代碼。 是否有一些方法可以啓動兩個線程並運行它們,儘管存在無限循環。具有兩個無限同時函數的多線程

##code 
from threading import Thread 
class myClass(): 
    def __init__(): 
     ##code here.. 
    def run(self): 
     print 'Starting ' 
     while(True): 
     print '1' 
class myClassSecond(): 
    def __init_(): 
     ##code here 
    def run(self): 
     print 'starting second' 
     while(True): 
      print '2' 


if __name__=='__main__': 
    a=myClass() 
    b=myClassSecond() 
    aa=Thread(a.run()) 
    bb=Thread(b.run()) 
    aa.start() 
    bb.start() 
    aa.join() 

在執行的線程AA得到啓動,但因爲while循環,AA不會從itself.and出口由於此主題BB不會start.Is有任何其他的方法有,我可以啓動這些兩個紗線(PS while循環不能從代碼中刪除。)

OUTPUT:

1 
1 
1 
1 
1 
and so on. 

需要的輸出: 應該ATLEAST給我事端,如:

kindof事情

+0

你知不知道,你可以做'MyClass類(主題):#代碼幾乎before',然後你可以做一個'MyClass的=(); a.start()'?唯一要記住的是在類的__init__中添加'super(MyClass,self).__ init __()'。 – Bakuriu

回答

2

的問題是,你永遠不會創建線程。 .. 的任何一方。您正在處理第一次調用Thread的參數,並在a.run()中輸入無限循環。您需要讓Thread通話運行,而不是您。更改run()run並將其設置爲target,像這樣:

if __name__=='__main__': 
    a=myClass() 
    b=myClassSecond() 
    aa=Thread(target=a.run) 
    bb=Thread(target=b.run) 
    ... 

注:Thread第一個參數是group這是不是你想要的。

另外你可能想考慮讓你的線程對象實際上從Thread繼承。然後,你可以簡單地做:

class myClass(Thread): 
    def run(self): 
     print 'Starting ' 
     while(True): 
      print '1' 

class myClassSecond(Thread): 
    def run(self): 
     print 'starting second' 
     while(True): 
      print '2' 

if __name__=='__main__': 
    a=myClass() 
    b=myClassSecond() 
    a.start() 
    b.start() 
    ... 
+0

謝謝...現在它可以工作 – kushal

3

一個很好的教程學習關於併發(多線程)的蟒蛇可以在下面的鏈接中找到參考。

http://www.tutorialspoint.com/python/python_multithreading.htm

我去修改你提供的代碼示例,使其執行像你解釋,保持代碼儘可能接近你原來的例子。

from threading import Thread 

class myClass(Thread): 
    def __init__(self): 
     Thread.__init__(self) 

    def run(self): 
     print 'Starting' 
     while True: 
      print '1' 

class myClassSecond(Thread): 
    def __init__(self): 
     Thread.__init__(self) 

    def run(self): 
     print 'Starting Second' 
     while True: 
      print '2' 

if __name__ == '__main__': 
    a = myClass() 
    b = myClassSecond() 

    a.start() 
    b.start() 

該示例的輸出如下所示。

>>> 
Starting 
>>> Starting Second 

12 

12 

12 

12 

12 

12 

12 

12 

12 

12 

12 

12 

12 

12 

在你會發現,兩個線程輸出被打印到同一行,並且有號碼的各行之間的空行的輸出。發生這種情況是因爲標準輸出(打印功能)是共享資源。這意味着每個線程都在爭奪這個資源。每個線程都可以訪問標準輸出,但不保證順序,也不保證每個線程都能夠在另一個線程獲得CPU控制權之前完成其命令的執行。以下是實際發生的情況。

  • 線程1輸出字符串: '1個\ N'
  • 線程2輸出字符串: '2 \ N'

通知新行終止。通常,當你使用python中的打印命令打印任何東西時,如果命令會導致下一個打印的項目顯示在新行上,則該命令會嘗試在該項目的末尾追加'\ n'。使用多線程時,同樣的事情正在發生,但由於標準輸出是共享資源,所有文本都不會按照正確的順序添加。

以下列表顯示將字符添加到顯示器的順序。

  1. \ n
  2. \ n

所以顯示會是下面如果新行字符也清晰可見。

12\n 
\n 

希望這可以幫助您更好地理解線程,並幫助您解決線程問題。

-Andrew

相關問題