2017-07-15 121 views
5

我是python的中間蜜蜂,希望運行少數並行模式的相同類實例以獲取金融市場的數據和決策。爲了繼續我的想法,我運行下面的代碼來看看python是如何工作的,它看起來像是第一類實例的一個完整運行,並且在第二類實例之後,我想要並行運行,我怎麼能......? 下面是測試一些示例代碼..並行處理Python線程

import threading 
import time 

class thr(object): 

    def __init__(self, name): 
    self.name = name 
    self.x = 0 

    def run(self): 
    for i in list(range(10)): 
     self.x +=1 
     print("something {0} {1}".format(self.name, self.x)) 
     time.sleep(1)    

F = thr("First") 
S = thr("Second") 

threading.Thread(target=F.run()) 
threading.Thread(target=S.run()) 

和下面的結果....

something First 1 
something First 2 
something First 3 
something First 4 
something First 5 
something First 6 
something First 7 
something First 8 
something First 9 
something First 10 
something Second 1 
something Second 2 
something Second 3 
something Second 4 
something Second 5 
something Second 6 
something Second 7 
something Second 8 
something Second 9 
something Second 10 
Out[27]: <Thread(Thread-25, initial)> 

回答

8

的問題是在這裏:

threading.Thread(target=F.run()) 
threading.Thread(target=S.run()) 

target=需要調用對象或NoneF.run()立即執行F.run,等待它結束,然後將返回值(在run()方法中的None)作爲目標傳遞。

你想是這樣的,而不是:

t1 = threading.Thread(target=F.run) 
t2 = threading.Thread(target=S.run) 
t1.start() 
t2.start() 

注意有沒有括號後run

下面是與所建議的修改完整的程序:

import threading 
import time 

class thr(object): 

    def __init__(self, name): 
    self.name = name 
    self.x = 0 

    def run(self): 
    for i in list(range(10)): 
     self.x +=1 
     print("something {0} {1}".format(self.name, self.x)) 
     time.sleep(1)    

F = thr("First") 
S = thr("Second") 

t1 = threading.Thread(target=F.run) 
t2 = threading.Thread(target=S.run) 
t1.start() 
t2.start() 

和輸出(Python的3.6 .1):

$ python sf.py 
something First 1 
something Second 1 
something Second 2 
something First 2 
something Second 3 
something First 3 
something Second 4 
something First 4 
something Second 5 
something First 5 
something Second 6 
something First 6 
something Second 7 
something First 7 
something First 8 
something Second 8 
something First 9 
something Second 9 
something First 10 
something Second 10 
+0

對於誰低估了這一點:進行我建議的更改,並實際運行代碼。它解決了OP的陳述問題,也是我給出的原因。 –

+0

這是相當明顯的正確答案.. – thebjorn

+1

是的,它是 - 但不幸的是,任何人都可以投票;-) –