|
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 37
|
||||||
Как в функции вернуть значение, а потом продолжить работу этой функции?22.05.2019, 18:33. Показов 9311. Ответов 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
Как вернуть значение из функции
Как вернуть значение функции Как вернуть значение функции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|