2013-09-12 2 views
-1

Я просмотрел все предыдущие ответы, и они слишком сложны для новичка, подобного мне. Я хочу одновременно запускать петли одновременно. Например, я хочу, чтобы запустить эти два одновременно:Простой способ одновременного запуска двух циклов с использованием потоков?

def firstFunction(): 
    do things 

def secondFunction(): 
    do some other things 

Как я уже сказал, другие ответы слишком сложны для меня понять.

+4

* Почему * они слишком сложны? Что вы пытались сделать, это не сработало? – Marcin

+1

Что делают две петли? Когда и как прекращаются функции? Что произойдет, если вы остановитесь перед другим? – Joe

+0

Где находятся циклы while, о которых вы говорите? Являются ли они внутри функций? – flornquake

ответ

4

Если предположить, что в то время как петли находятся в пределах функций, которые вы перечислили, это самый простой способ, которым я могу думать.

from threading import Thread 

t1 = Thread(target = firstFunction) 
t2 = Thread(target = secondFunction) 

t1.start() 
t2.start() 

Как указано tdelaney, выполнение этого способа будет только начинать каждую нить и немедленно двигаться дальше. Если вам нужно дождаться завершения этих потоков, прежде чем запускать оставшуюся часть вашей программы, вы можете использовать метод .join().

+1

't1.join()' и 't2.join()' необходимы, чтобы приложение ожидало завершения потоков. – tdelaney

2

Вот довольно простой класс потоков, который может помочь вам.

from threading import * 

class FuncThread(threading.Thread): 
    def __init__(self, target, *args): 
     self._target = target 
     self._args = args 
     threading.Thread.__init__(self) 

    def run(self): 
     self._target() 

Чтобы назвать его использовать:

ThreadOne = FuncThread(firstFunction()) 
ThreadOne.start() 
secondFunction() 
ThreadOne.join() 

Что вы должны получить довольно близко. Вам нужно будет сыграть с ним, чтобы он работал в вашем сценарии. Будьте осторожны при работе с несколькими контурами while, убедитесь, что вы построили выход. Threading жестко, но попробуйте прочитать его в документации и сделать то, что я предоставил вам, если сможете.

http://docs.python.org/2/library/threading.html

+1

FuncThread не добавляет ничего, кроме того, что threading.Thread все равно. Не нужно усложнять вещи. – tdelaney

2

Использование thread модуля:

import thread 
def firstFunction(): 
    while some_condition: 
     do_something() 

def secondFunction(): 
    while some_other_condition: 
     do_something_else() 

thread.start_new_thread(firstFunction,()) 
thread.start_new_thread(secondFunction,()) 
+0

Как насчет этих функций - бесконечный цикл? –

+0

@OfirAttia Они все равно будут работать, но никогда не кончатся. Вероятно, вам понадобится дескриптор потока для его завершения позже, поэтому используйте (в Python 2.7) класс 'threading.Thread'. –

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