2016-04-25 7 views
3

Я хочу иметь два цикла while True, работающих одновременно. Возможно ли это?Можно запустить сразу две бесконечные петли?

Я чрезвычайно новичок в Python, поэтому я не знаю, как обойти эту проблему.

Это код, который я сделал:

import time 

def infiniteLoop(): 
    while True: 
     print('Loop 1') 
     time.sleep(1) 

infiniteLoop() 

while True: 
    print('Loop 2') 
    time.sleep(1) 

Прямо сейчас, это просто печатает «Циклический 1»

Заранее спасибо

+10

Вам нужно два потока для запуска двух циклов. – sobolevn

+1

Почему вы хотите, чтобы одновременно работали две отдельные петли? –

+0

Поскольку вы используете 'time.sleep' вместо более сложной структуры, такой как скрученный или торнадо, вы привязаны к использованию потоков. –

ответ

5

Чтобы запустить обе петли на один раз, вам необходимо либо для использования двух потоков или чередования петель вместе.

Метод 1:

import time 
def infiniteloop(): 
    while True: 
     print('Loop 1') 
     time.sleep(1) 
     print('Loop 2') 
     time.sleep(1) 

infiniteloop() 

Метод 2:

import threading 
import time 

def infiniteloop1(): 
    while True: 
     print('Loop 1') 
     time.sleep(1) 

def infiniteloop2(): 
    while True: 
     print('Loop 2') 
     time.sleep(1) 

thread1 = threading.Thread(target=infiniteloop1) 
thread1.start() 

thread2 = threading.Thread(target=infiniteloop2) 
thread2.start() 
+1

Спасибо большое! Действительно помог! –

+0

он должен быть 'target = infiniteloop1' вместо' target = infiniteloop1() 'тот же с infiniteloop2 –

+0

Спасибо @Francisco. Просто отредактировал – Brian

1

Хотя ответ Брайана покрывали Вас, функции генератора языка Python (и магия yield) позволяют решение с двумя реальными петлями и без резьбы:

def a(): 
    while True: # infinite loop nr. 1 (kind of) 
     print('Loop 1') 
     yield 

def b(): 
    for _ in a(): # infinite loop nr. 2 
     print('Loop 2') 

> b() 
Loop 1 
Loop 2 
Loop 1 
Loop 2 
.... 

Здесь две петли в a() и b() действительно чередуются в том смысле, что на каждой итерации выполнение передается между ними.

+0

Очень похоже на первый метод, который я поставил;) – Brian

+0

Да и нет. У вашего первого решения есть только один цикл (с двумя операциями 'print'). – schwobaseggl

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