2017-07-15 116 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

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