Будут ли несколько циклов while с одинаковыми условиями инициироваться последовательно или одновременно? - PullRequest
0 голосов
/ 03 декабря 2018

Предположим, у меня есть несколько циклов while, основанных на одной и той же переменной, скажем,

#loop 1
count = 0
while count < len(list): #where list is non-empty
    do stuff
    count = count + 1
delete some things from list
count = 0

#loop 2
while count < len(list): #where list is still non-empty but shorter than before
    do other stuff
    count = count + 1
delete more things from list
count = 0

#loop 3
while 0 < len(list): #where list is less than before but still nonempty
    while count < len(list): #nested within above while loop
        do even more stuff
        count = count + 1
    delete more items of the list
    count = 0
#list is now empty

Будут ли эти циклы 3 инициироваться одновременно?Или он будет инициировать по одному?

Ответы [ 3 ]

0 голосов
/ 03 декабря 2018

Это построчное выполнение сверху вниз вашей программы, поскольку вы не многопоточны / не обрабатываете.Следовательно, он будет работать последовательно, а не параллельно.

0 голосов
/ 03 декабря 2018

Вот тестовый пример:

items = [1,2,3,4,5,6,7,8,9]

count = 0
while items:
    print(items.pop(0))
    count += 1
    if count == 3:
        break

print("new while")
while items:
    print(items.pop(0))
    count += 1
    if count == 6:
        break

print("last while")
while items:
    print(items.pop(0))
    count += 1

Благодаря GIL в Python, многие элементы, такие как списки, могут работать одновременно, без их разделения:

import threading, time
items = [1,2,3,4,5,6,7,8,9]

def stuff(x, count_limit):
    t = threading.current_thread()
    count = 0
    while items:
        print(t.name + ": " + str(items.pop(0)) + " count: " + str(count) + "\n", end = "")
        count += 1
        if count_limit:
            if count == count_limit:
                break

threads = []

counts = [3,6,False]
for x, count in enumerate(counts):
    t = threading.Thread(target = stuff, args = (items, count,))
    t.name = "Thread " + str(x)
    threads.append(t)

для потокав темах: thread.start ()

для тем в темах: thread.join ()

0 голосов
/ 03 декабря 2018

Программа представляет собой список инструкций.

Они выполняются сверху вниз.

Поэтому ответом является нет , они не сработают прив то же время.


Например, что здесь происходит?

import time
print('one')
time.sleep(1)
print('two')
time.sleep(1)
print('three')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...