2013-08-14 1 views
1

Я пытаюсь использовать python для кодирования многопоточной программы. Поскольку я очень новичок в python, я утверждаю, что если бы я спросил что-то общее.с использованием многопоточной функции excute member в Python

Вот мой код в основном:

multi_threads = [] 
    simulator = Simulation(simulation_number) 
     # Simulation is my class, run() is a member function 

    for i in range(0, thread_number): 
     multi_threads.append(Thread(target = simulator.run, args = (start, end,))) 

    for i in range(0, thread_number): 
     multi_threads[i].start() 
     multi_threads[i].join() 

и имитация :: бежать:

def run(self, start, end): 
     # do something... 
     print "in run" 
     return 

Я ожидаю увидеть in run несколько раз. Но оказывается, что ничего нет.

Могу я узнать, что я не так? Спасибо заранее.

+0

вы должны вызвать метод «start» .http: //docs.python.org/2/library/threading.html#threading.Thread.start – danihp

+0

@ danihp Да, я назвал 'start' и' join' для каждого из потоки. – ChangeMyName

+0

Вы должны сделать это в двух циклах, сначала в начале и в начале второго. Avoiid выполняет обе операции в одном цикле. – danihp

ответ

0

Вам необходимо позвонить по номеру .start(). Так что в вашем случае:

for t in multi_threads: 
    t.start() 

отредактирован измениться выполнить для запуска (спасибо комментаторам, я misremembered название метода)

+0

Вы имеете в виду 'start', это не так? – danihp

+0

Обратите внимание, что вызов 'run' вы * не * запускаете код одновременно, это обычный вызов метода. Вы должны использовать 'start', который будет запускать метод' run' в другом потоке. – Bakuriu

0

Вот некоторые полный код:

from threading import Thread 

class Simulation(object): 
    def __init__(self, n): 
     pass 

    def run(self, start, end): 
     print "Running",start,end 

simulation_number=None 

start = None 
end = None 

thread_number=5 


multi_threads = [] 
simulator = Simulation(simulation_number) 
# Simulation is my class, run() is a member function 


for i in range(0, thread_number): 
    multi_threads.append(Thread(target = simulator.run, args = (i, end,))) 

for i in range(0, thread_number): 
    multi_threads[i].start() 
    multi_threads[i].join() 

И выводит «Running» для каждого потока, хотя в этом случае каждый поток заканчивается до следующего запуска, поэтому нет смысла использовать потоки.

Смежные вопросы