|
0 / 0 / 0
Регистрация: 01.10.2018
Сообщений: 37
|
||||||
Как в функции вернуть значение, а потом продолжить работу этой функции?22.05.2019, 18:33. Показов 9177. Ответов 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
Как вернуть значение из функции
Как вернуть значение функции Как вернуть значение функции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|