Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 21, 2021 17:54:05

izooomrud
Зарегистрирован: 2021-01-16
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка "RuntimeError: threads can only be started once"

Почему код в этом случае отрабатывает

 def test(value):
    print("Thread start with value = " + str(value))
chest = ['one', 'two', 'three', 'four', 'five']
for i in chest:
    threads.append(threading.Thread(target=test, args=(i,)))
for i in threads:
    i.start()
for i in threads:
    i.join()

а в этом выдаёт ошибку “RuntimeError: threads can only be started once”

 def test(value):
    print("Thread start with value = " + str(value))
box = [{'one': 1}, {'two': 2}, {'three': 3}, {'four': 4}, {'five': 5}]
for i in box:
    for k in i:
        threads.append(threading.Thread(target=test, args=(k,)))
    for i in threads:
        i.start()
    for i in threads:
        i.join()

и как это решить?

Офлайн

#2 Янв. 21, 2021 21:09:35

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Ошибка "RuntimeError: threads can only be started once"

     for i in threads:
        i.start()
    for i in threads:
        i.join()
отступы убрать.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#3 Янв. 21, 2021 21:23:07

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1372
Репутация: +  121  -
Профиль   Отправить e-mail  

Ошибка "RuntimeError: threads can only be started once"

у вас один и тот же поток во втором случае стартует несколько раз,
это как

 def test(value):
    print("Thread start with value = " + str(value))
chest = ['one', 'two', 'three', 'four', 'five']
th = threading.Thread(target=test, args=(chest[0],))
th.start()# стартанули
th.start()# когда сказали стартануть этот же поток еще раз,вылезла ошибка(стартовать 1 раз,больше не нужно)

вот так в коде выглядит

 import threading
threads = []
def test(value):
    print("Thread start with value = " + str(value))
box = [{'one': 1}, {'two': 2}, {'three': 3}, {'four': 4}, {'five': 5}]
for i in box:
    print('>>>>>>>>>>>>>>>>>>>>>>')
    for k in i:
        threads.append(threading.Thread(target=test, args=(k,)))
    for i in threads:
        print(f'{i}.start()')

 >>>>>>>>>>>>>>>>>>>>>>
<Thread(Thread-1, initial)>.start()
>>>>>>>>>>>>>>>>>>>>>>
<Thread(Thread-1, initial)>.start()
<Thread(Thread-2, initial)>.start()
>>>>>>>>>>>>>>>>>>>>>>
<Thread(Thread-1, initial)>.start()
<Thread(Thread-2, initial)>.start()
<Thread(Thread-3, initial)>.start()
>>>>>>>>>>>>>>>>>>>>>>
<Thread(Thread-1, initial)>.start()
<Thread(Thread-2, initial)>.start()
<Thread(Thread-3, initial)>.start()
<Thread(Thread-4, initial)>.start()
>>>>>>>>>>>>>>>>>>>>>>
<Thread(Thread-1, initial)>.start()
<Thread(Thread-2, initial)>.start()
<Thread(Thread-3, initial)>.start()
<Thread(Thread-4, initial)>.start()
<Thread(Thread-5, initial)>.start()
Process finished with exit code 0

решение выше написали,сначала собрать все потоки,а потом друг за другом один раз запустить

Отредактировано xam1816 (Янв. 21, 2021 21:32:08)

Офлайн

#4 Янв. 22, 2021 13:32:32

izooomrud
Зарегистрирован: 2021-01-16
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка "RuntimeError: threads can only be started once"

PEHDOM
отступы убрать.
или массив обнулить
 def test(value):
    print("Thread start with value = " + str(value))
box = [{'one': 1}, {'two': 2}, {'three': 3}, {'four': 4}, {'five': 5}]
for i in box:
    for k in i:
        threads.append(threading.Thread(target=test, args=(k,)))
    for i in threads:
        i.start()
    for i in threads:
        i.join()
   threads = []

Офлайн

#5 Янв. 22, 2021 14:18:57

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Ошибка "RuntimeError: threads can only be started once"

izooomrud
или массив обнулить
так у вас тогда никакой многопоточности. Учитывая что в for k in i: всего один элемент, вы просто запускаете поток, ждете пока он отработает, запускаете следующий и т.д.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version