Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/29: Рейтинг темы: голосов - 29, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 16.07.2021
Сообщений: 1

Запуск асинхронных функций в отдельных потоках

16.07.2021, 18:48. Показов 5940. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, создаю потоки под обычные функции вот так:

Нужно сделать то же самое для запуска асинхронных функций, пробовал засунуть asyncio.run в run, дает ошибку, мол не может запускаться в потоке. Просто добавить async тоже не покатит.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# -*- coding: utf-8 -*-
from os import path
import random
import time
from threading import Thread
import datetime
 
class MyThread(Thread):
    """ Класс для запуска потока """
    def __init__(self, name):
        """Инициализация потока"""
        Thread.__init__(self)
        self.name = name
    
    def run(self):
        """ Запуск потока """
        amount = random.randint(3, 15)
        
        print(f'{datetime.datetime.now().strftime("%d.%m.%Y %H:%M:%S")} | Поток {self.name} запущен.')
        time.sleep(amount)
 
        # Запуск функции
 
 
        print(f'{datetime.datetime.now().strftime("%d.%m.%Y %H:%M:%S")} | Поток {self.name} завершен.')
 
 
# Создание потока
def waiting_a(name):
    name = "%s" % name
    my_thread = MyThread(name)
    my_thread.start()
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.07.2021, 18:48
Ответы с готовыми решениями:

Запуск функци в отдельных потоках
Здравствуйте. Подскажите пожалуйста, возможно ли запустить функции funkA, funkB, funkC в разных потоках? public class SmartAlgorithm...

Запуск методов класса в отдельных потоках
Столкнулся со следующей проблемой. Есть некий класс, методы которого должны выполняться каждый в своем потоке. Если использовать QThread...

Вычислить значения в отдельных потоках.
Необходимо написать программу.Значения y1 и y2 необходимо вычислять в подпрограммах, таким образом, чтобы они протекали как отдельные...

4
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.07.2021, 23:05
Цитата Сообщение от likedogs Посмотреть сообщение
создаю потоки под обычные функции вот так
Этот интерфейс создания потоков давно устарел - зря копипастил из старых статеек.
Читай доку - там есть гораздо более удобные обертки для использования многопоточности.

Асинхронка к потокам вообще не имеет отношения. Это мультизадачность в одном потоке.
0
0 / 0 / 0
Регистрация: 22.05.2021
Сообщений: 10
16.07.2021, 23:36
В какой документации можно найти нормальную обёртку?

Добавлено через 4 минуты
Garry Galler, где можно найти нормальную обёртку?
0
Эксперт Python
1356 / 653 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
16.07.2021, 23:44
likedogs,
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import asyncio
import time
from aiohttp import ClientSession, ClientResponseError
 
 
async def fetch_url_data(session, url):
    try:
        async with session.get(url, timeout=60) as response:
            resp = await response.read()
    except Exception as e:
        print(e)
    else:
        return resp
    return
 
 
async def fetch_async(loop, r):
    url = "https://www.uefa.com/uefaeuro-2020/"
    tasks = []
    async with ClientSession() as session:
        for i in range(r):
            task = asyncio.ensure_future(fetch_url_data(session, url))
            tasks.append(task)
        responses = await asyncio.gather(*tasks)
    return responses
 
 
if __name__ == '__main__':
    for ntimes in [1, 10, 50, 100, 500]:
        start_time = time.time()
        loop = asyncio.get_event_loop()
        future = asyncio.ensure_future(fetch_async(loop, ntimes))
        # будет выполняться до тех пор, пока не завершится или не возникнет ошибка
        loop.run_until_complete(future)
        responses = future.result()
        print(f'Получено {ntimes} результатов запроса за {time.time() - start_time} секунд')
простой примр

Добавлено через 2 минуты
Читано тут
1
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
17.07.2021, 01:35
Цитата Сообщение от Ebelex Посмотреть сообщение
В какой документации можно найти нормальную обёртку?
Открой для себя мир документации Python и закрой мир статеек и скринкастов.

https://docs.python.org/3/libr... tures.html

https://docs.python.org/3/libr... sing.dummy
multiprocessing это не только про процессы.

Как видишь, целая куча способов сделать одно и тоже. Но все-таки между ними есть разница... и она описана в документации.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
from multiprocessing.pool import ThreadPool
#from multiprocessing.dummy import Pool as ThreadPool  # это тоже самое
 
def f(x):
    return x*x
 
if __name__ == '__main__':
    pool = ThreadPool(4)         # start 4 worker threads
    nums = 10
    results = [pool.apply_async(f, args=(i,)) for i in range(nums)]
    for r in results:
        print(r.get()) 
    
    pool.close()
    pool.join()
    
    print("-" * 10)
    pool = ThreadPool(4)  
    results = pool.map_async(f, range(nums))
    for r in results.get():
        print(r) 
    
    pool.close()
    pool.join()
    
    print("-" * 10)
    pool = ThreadPool(4)
    results = [pool.apply(f, args=(i,)) for i in range(nums)]
    for r in results:
        print(r) 
    
    pool.close()
    pool.join()
    
    print("-" * 10)
    pool = ThreadPool(4)
    for r in pool.map(f, range(nums)):
        print(r) 
    
    pool.close()
    pool.join()
    
    print("-" * 10)
    pool = ThreadPool(4)  
    for r in pool.imap(f, range(nums)):
        print(r)
    
    pool.close()
    pool.join()
    
    print("-" * 10)    
    pool = ThreadPool(4)  
    for r in pool.imap_unordered(f, range(nums)):
        print(r)  
            
    pool.close()
    pool.join()
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.07.2021, 01:35
Помогаю со студенческими работами здесь

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

Работа контролов в отдельных потоках
Имеется приложение-хост (проект WPF) к которому цепляем разные контролы (в DLL) у контролов есть свой визуальный интерфейс и функционал....

Тщательное пингование подсети в отдельных потоках
Здравствуйте. Необходимо пропинговать подсеть и получить список всех активных хостов с их mac-адресами. Делать это в одном потоке...

OpenMP выполнение процедур в отдельных потоках
Есть две независимые процедуры. Требуется выполнить их в отдельных потоках. Вопрос: как это сделать при помощи технологии OpenMP?

Создание копий файла в отдельных потоках
2)Разработать программу, которая будет запускать заданное количество потоков, в каждом из которых будет создаваться копия указанного в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru