|
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 37
|
||||||
Как в функции вернуть значение, а потом продолжить работу этой функции?22.05.2019, 18:33. Показов 9388. Ответов 14
Метки нет (Все метки)
Есть функция main, которая возвращает определенное значение. Это значение должно вернутся в течении 1.5 секунд. Проблема в том, что в этой функции, запускается функцию(send_message), которая отправляет сообщение на почту пользователю, и отправка этого сообщения, иногда, занимает больше 1.5 секунда, из-за чего функция main не успевает вернуть значение. Можно ли запустить функцию send_message, так чтобы функция main сначала вернула значение, а потом выполнила функцию send_message? Или запустила функцию send_message, но не ждала завершения работы этой функции, а сразу вернула значение?
0
|
||||||
| 22.05.2019, 18:33 | |
|
Ответы с готовыми решениями:
14
Функция atan(x) и разложение ряда этой функции. Выводит -nan(ind). Как вернуть значение не используя return и printf()? Как посчитать и запомнить значение переменной в одной функции, а потом использовать ее в другой функции? |
|
|
|
| 22.05.2019, 19:44 | |
|
Вызывайте send_email асинхронно.
Формально, вернуть значение и потом продолжить работу можно, но это уже будет генератор, а не одиночный вызов. Однако в вашей ситуации, думаю, лучше всё-таки асинхронно вызвать отправку почты.
1
|
|
| 22.05.2019, 20:11 | ||
|
Klaud1, Я не вижу здесь функции send_message, поэтому трудно что то сказать. Единственно, что можно сказать, если функция возвращает значение, то она заканчивает свою работу. Если же Вам нужно, что бы функция вернула значение и при том это значение должно еще обрабатываться, а при этом должна запуститься еще одна функция, то это уже должны запускаться параллельные процессы, но я с ними не знаком.
Добавлено через 14 минут Что бы не гадать, нужно видеть весь код, а не огрызок.
0
|
||
|
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 37
|
||||||
| 22.05.2019, 20:24 [ТС] | ||||||
|
Перепутал. Send_message случайно назван send_mail. Скрипт написан для навыка Яндекс.Алисы. Яндекс.Алиса должна получать ответ от сервера в течении 1.5 секунд. В определенный момент скрипт должен запустить функцию, которая отправит сообщение на почту, а это занимает больше 1,5 секунд. В результате, при обычном вызове функции send_message, функция main вернет значение, только после того как отправиться сообщение . В итоге пользователь получает сообщение на почту, а навык ничего не получает, так как ответ не успел прийти.
0
|
||||||
| 22.05.2019, 20:51 | ||||||
|
Klaud1, Здесь не видно, где вызывается функция main(). А почему бы из функции main() также не вернуть параметр functionsStorage для функции send_message и уже выйдя из функции main() сразу же запустить функцию send_message(functionsStorage), так как параметр у вас будет. И приступить к обработке, которую нужно делать после выхода из функции main(). Тогда выход из функции будет
0
|
||||||
|
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 37
|
||||||
| 22.05.2019, 21:06 [ТС] | ||||||
|
Модуль вызывается flask.
0
|
||||||
| 22.05.2019, 21:13 | |
|
Кстати, так как у Вас функция send_message запускается в блоке if , то return возвращающий два элемента, нужно расположить в блоке if в качестве второго return. А первый return оставить там, где он сейчас.
И у Вас что то не так с отступами в коде. Добавлено через 2 минуты Раз Вы используете модуль, в который не можете залезть, тогда Вам мой совет не подходит. Попробуйте сделать, как Вам советует dondublon.
0
|
|
|
103 / 91 / 32
Регистрация: 30.05.2015
Сообщений: 594
|
|
| 23.05.2019, 00:55 | |
|
тут либо асихнронно (фынтс/фцфше), либо разбить на Thread
0
|
|
| 23.05.2019, 10:22 | |||||||||||||||||||||||||||
|
То есть как то так
Если возникнут проблемы с передачей данных (так как функцию main() вызывает Flask() ) то можно передачу данных осуществить не через глобальные переменные, а через список
Klaud1, Но это сработает только если программа выходит из Flask(). Я не знаю, что такое Flask(). Если после его запуска программа остается висеть в нем, то этот предлагаемый мной вариант, тоже не пригоден. Тогда только распараллеливать процессы. Добавлено через 13 минут Я наконец прочитал про Flask. Flask является микрофреймворком для создания вебсайтов на языке Python. То есть после запуска, Вы в нем висите. Поэтому мой вариант не применим. Если есть какой то вариант, кроме запуска параллельного процесса, то нужно разбираться с Flask. Может кто то его хорошо знает и подскажет.
0
|
|||||||||||||||||||||||||||
|
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 37
|
||||||
| 23.05.2019, 19:37 [ТС] | ||||||
|
dondublon, попробовал сделать асинхронность, с помощью библиотеки asyncio, но все равно сначала скрипт ждет окончания отправки сообщения, а потом уже возвращает значение. Не подскажите как правильно настроить асинхронность? Можно на другой библиотеке.
0
|
||||||
| 23.05.2019, 23:49 | ||
|
Klaud1, может вам поможет функция Map для распараллеливания кода. Про нее рассказано в следующей статье, ближе к середине:
http://toly.github.io/blog/201... -one-line/ Интересная функция, хотя я с ней не работал, так как у меня не возникало необходимости. Добавлено через 5 минут Функция map с поддержкой многопоточности присутствует в двух библиотеках: multiprocessing, а так же малоизвестная, но неменее замечательная - multiprocessing.dummy. Добавлено через 19 минут Попробуйте, может у Вас получится. Стоит ли возится с этой функцией, зависит от того, насколько для Вас важно решить Вашу задачу.
0
|
||
|
|
||
| 24.05.2019, 10:27 | ||
|
Klaud1, asyncio несколько сложноват для вас, сделайте для начала просто в отдельном потоке (multithreading).
Впрочем, если разберётесь - будете молодец.
0
|
||
| 24.05.2019, 12:01 | |
|
Klaud1, В статье, ссылку на которую я дал, рассматриваются разные способы распараллеливания. В том числе и библиотека threading. Однако "распространенные руководства о библиотеках threading и multiprocessing в целом неплохие, но тяжеловаты для понимания. Они начинаются с глубоких вещей, и заканчиваются до просто применяемых практик." Так как я сам этой темой не занимался, то конкретно с кодом помочь Вам не могу.
Удачи Вам.
0
|
|
| 24.05.2019, 12:01 | |
|
Помогаю со студенческими работами здесь
15
Как вернуть значение из функции
Как вернуть значение функции Как вернуть значение функции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|