Задать вопрос
InternetMaster
@InternetMaster
Интернет

Не работает многопоточность?

Вопрос: использую threading для многопоточности, но тут возникла проблема которую как раз и должен решить многопоток, но она не исчезла. Вопрос в том, что код не продолжает выполнятся, хотя используется многопоточность.

Вот сам код:

def egz_checkden():
    svv = sqlite.GetInfo()
    svv.get_okdata()
    itt = sqlite.itt
    d = datetime.now()
    date = d.strftime('%d.%m.%Y')
    print(221)
    for x in itt:
        if x[4] < date:
            svv.useer_id = x[1]
            svv.udal_subs()
            with open(os.path.abspath(os.getcwd()) + '\HistorySubs\\' + x[1] + '.txt', 'a+') as file:
                if x[5] == '0':
                    file.write(f'User ID: {x[1]}\nUsername: {x[2]}\nData Start: {x[3]}\nData End: {x[4]}\nProdlen: No\nLimit: {x[7]}\n\n')
                    file.close()
                else:
                    file.write(f'User ID: {x[1]}\nUsername: {x[2]}\nData Start: {x[3]}\nData End: {x[4]}\nProdlen: Yes\nKolvo Prodlen: {x[6]}\nLimit: {x[7]}\n\n')
                    file.close()
    time.sleep(86400)
    egz_checkden()
Thread(target=egz_checkden(), args=())
chckden.start()
print('OK!') # Тут код уже не работает
  • Вопрос задан
  • 179 просмотров
Подписаться 1 Простой 9 комментариев
Пригласить эксперта
Ответы на вопрос 3
Vindicar
@Vindicar
RTFM!
Thread(target=egz_checkden(), args=())

Когда уже погромисты научатся различать результат вызова функции (со скобками) и ссылку на функцию (без скобок).
У тебя сейчас Питон пытается выполнить egz_checkden(), чтобы получить её возвращаемое значение и использовать его в качестве target.

И да, у тебя в egz_checkden() бесконечная рекурсия, пусть и медленная. Вылетит с переполнением стека, хотя и не сразу. Не делай так, используй нормальный цикл.
Ответ написан
@mkone112
Начинающий питонист.
Мне кажется что все должно работать...эм...как и должно. С чего ты решил что оно должно дойти до print?
Ответ написан
@javedimka
Хочу сока
Thread(target=egz_checkden(), args=())

в target надо передавать объект функции, а не результат её выполнения

Thread(target=egz_checkden, args=())
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы