@Scorpiored88

Как добавить задачу в очередь к существующему паралельному потоку в Python 3?

Всем доброго! Только изучаю Python, и вот столкнулся с проблемой:
Есть у меня функция для работы с таблицамы google, в ней я считываю количество заполненых row и в row_count +1 заношу новые данные. Но процесс записи в таблицу занимает много времени, и я решил выполнять это действия в новом потоке, для того, чтобы можно было принимать новие запросы на запись в таблицу. Но у меня получается каждый раз новый поток, а нужно просто скаладывать в очередь в этом отдельном потоке, потому как запрос на получения количества заполненых row выполняется быстро, получается так, что я записую разные данные в одну и ту же row, так как row_count все ище прежний, ибо предыдущая запись ище только в процеси и пока не закончилась
def append_to_sheet(id):
	action_time = datetime.now().strftime("%Y.%m.%d %H:%M:%S")
	row = [action_time, id]
	row_count = len(sheet.get_all_values())
	index = row_count +1
	sheet.insert_row(row, index)


def start_with_thread():
	while True:
		id = q.get()
		append_to_sheet(id)
		q.task_done()


и вызивается это
t = threading.Thread(target=start_with_thread)
t.setDaemon(True)
t.start()
q.put(id)

каждый раз при получении запроса на запись в таблицу, и соответсвено каждый раз создается новый поток в котором row_count будет одно и то же значения если новый запрос поступил раньше нежели закончилась преддыщая запись в таблицу. Как то так
  • Вопрос задан
  • 291 просмотр
Пригласить эксперта
Ответы на вопрос 1
Необходимо:
1) создавать поток только один раз, в начале работы программы
2) использовать Queue для общения с ним: https://docs.python.org/2/library/queue.html

Альтернатива, чтобы было гораздо проще - можно использовать Celery: celeryproject.org
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы