0 / 0 / 0
Регистрация: 30.05.2021
Сообщений: 3
Discord Bot

Многопоточность в Python, отслеживание стоимости нескольких акций

30.05.2021, 15:58. Показов 2434. Ответов 4

Студворк — интернет-сервис помощи студентам
Я начинающий python программист, пишу бота для дискорд, не могу решить одну проблему, а конкретно: бот имеет две функции, показывать текущую стоимость акции, и ставить таймер на цену, при достижении этой суммы бот отправляет в группу уведомление что цена достигнута отметки. Проблема в том, что бот может следить только за одной акцией, но как сделать чтобы он следил за нескольким одновременно, и по достижении каждой отправлял сообщение та или иная акция достигла отметки. Код у меня возможно не очень корректный и не читабельный, но что смог то и написал. Жду от знатоков помощи, рекомендации, или можно как то это все реализовать по другому. За ранее благодарю.

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import bs4
import requests
from bs4 import BeautifulSoup
import discord
from discord.ext import commands
from config import settings
import threading
 
 
bot = commands.Bot(command_prefix = settings['prefix'], help_command=None)
 
 
@bot.event
async def on_message(message):
    await bot.process_commands(message)
    channel = message.channel
    co = '{0.content}'.format(message).split()
    tes=co[0]
    if tes=='price':
        yo=co[1]
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0'
        }
 
        def stock_price(stock_code):
            r = requests.get(
                ('https://finance.yahoo.com/quote/') + stock_code + ('?p=') + stock_code + ('.tsrc=fin-srch'),
                headers=headers)
            soup = BeautifulSoup(r.text, 'lxml')
            content = soup.find('div', {"class": 'My(6px) Pos(r) smartphone_Mt(6px)'}).find('span').text
 
            return content
 
        stock = yo.split()
 
        price = []
        for stock_code in stock:
            price.append(stock_price(stock_code))
        print(stock, price)
        st=str(stock).replace("['", "").replace("']", "")
        pr=str(price).replace("['","").replace("']","")
        await channel.send(f'{st} - {pr}')
 
 
    elif tes=='limit':
        p=co[1]
        su=co[2]
        pp=str(su).replace("['","").replace("']","")
        ppp=float(pp)
 
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0'
        }
 
        def stock_price(stock_code):
            r = requests.get(
                ('https://finance.yahoo.com/quote/') + stock_code + ('?p=') + stock_code + ('.tsrc=fin-srch'),
                headers=headers)
            soup = BeautifulSoup(r.text, 'lxml')
            content = soup.find('div', {"class": 'My(6px) Pos(r) smartphone_Mt(6px)'}).find('span').text
 
            return content
 
        stock = p.split()
 
        while True:
            price = []
            for stock_code in stock:
               price.append(stock_price(stock_code))
 
            ce=str(price).replace("['","").replace("']","")
            cena=float(ce)
            if cena>=ppp:
                await channel.send("достиг")
                break
 
            print(stock, price)
 
bot.run(settings['token'])
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.05.2021, 15:58
Ответы с готовыми решениями:

Найти вероятность того, что среди акций окажутся убыточными: не более 3 акций; никакой акции; более 4 акций
Выбрали наугад 200 акций. Вероятность того, что акция принесет ущерб, равна 0,025. найти вероятность того, что среди акций окажутся...

Найти вероятность того, что среди акций окажутся убыточными не более 3 акций; никакой акции; более 4 акций
Выбрали наугад 200 акций. вероятность того, что акция принесет ущерб, равна 0,025. найти вероятность того, что среди акций окажутся...

Отображение информации об изменении стоимости акций какой-либо компании, в виде полигона
Напишите программу, в окне которой в виде полигона отображается информация об изменении стоимости акций какой-либо компании (например, ОАО...

4
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
30.05.2021, 17:59
ReDe, а что же ты "начинающий python программист" не стал изучать основы питона? почему пропустил что такое асинхронка? она без потоков твою проблему решает, а ты ей палки в колеса суешь ибо не понимаешь как это работает.

план выхода из ситуации:
1) ботов пока забыть
2) читаем Марка Лутца от корки до корки, внимательно на ф-строки, на модули, на именование переменных, на организацию кода, декортаоры смотрим внимательно
3) изучаем что такое асинкио, чем оно отличается от мультитрединга
0
0 / 0 / 0
Регистрация: 30.05.2021
Сообщений: 3
30.05.2021, 18:11  [ТС]
Welemir1, я прекрасно понимаю что мне надо изучать, и изучаю. Но на данный момент я от Вас не прошу помочь советом что мне изучить, а решить проблему как мне это сделать, так как бот мне нужен в ближайшее время. Благодарю за уделенное Вами мне время
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
30.05.2021, 18:21
ReDe, так я по коду вижу что нет -не понимаешь. Потоки тебе не помогут, так как бот твой асинхронный. А что это значит? вот в ответе на этот вопрос и твое решение. Ты должен использовать только бибилиотеки асинхроннные, а не реквестс например

да и кто в ветках иф элсе создает функции?
0
262 / 151 / 33
Регистрация: 29.06.2019
Сообщений: 1,515
13.06.2021, 10:32
Цитата Сообщение от Welemir1 Посмотреть сообщение
Потоки тебе не помогут, так как бот твой асинхронный.
ТС'у: последний ПРИМЕР ЗДЕСЬ - обратите внимание: запросы на разные сайты должны быть или сайт не должен ограничивать по IP
Цитата Сообщение от Welemir1 Посмотреть сообщение
что такое асинхронка? она без потоков твою проблему решает
возможно, и не решит она его проблему, если он хочет запускать несколько обращений к одному сайту - зависит от политики сайта - возможно, там есть limit на подключение от 1-го IP...
поможет Yahoo Finance API – A Complete Guide - чтобы не колотить запросами по yahoo.finance ...
но здесь
There’s a basic free tier that allows up to 500 free API calls per month.
остальное not-free
есть и API docs

Добавлено через 9 минут
p.s.
но если сайт ставит ограничение на количество запросов с 1-го IP - вы можете переделать ваш код на синхронные запросы - и циклом колотить по yahoo.finance с проверкой "if достигла price" -- но это вариант плохой для вас, т.к. может и достичь и сделать ретрейс к прежнему уровню цены, пока вы циклом ходите по др. линкам и вернётесь к этому...

Добавлено через 5 минут
p.p.s.
а по-моему на вашем yahoo.finance исторические данные с задержкой 30 мин... имхо (раньше так было точно)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.06.2021, 10:32
Помогаю со студенческими работами здесь

Определить суммарную стоимость акций в тот месяц, когда цена акций упадет вдвое
В начале года на рынке ценных бумаг имелось N акций фирмы A по цене S рублей.В каждые последующие месяцы количество этих акций увеличилось...

Показ графиков нескольких курсов акций/валют в реальном времени с ипользованием библиотеки Socket.IO
Не могу разобраться с Node.js Столько всего пересмотрел, а толку ноль. Может поможете? Показ графиков нескольких курсов акций/валют в...

Цикл repeat. Стоимость акций известной фирмы стабильно растёт на протяжении 6 месяцев. Найти стоимость акций
Пожалуйста решите с циклом repeat. Стоимость акций известной фирмы стабильно растёт на протяжении 6 месяцев, каждый месяц на 0,6%....

Создайте словарь, отображающий идентификаторы акций на бирже. Ключами словаря являются идентификаторы акций, а значениям
Создайте словарь, отображающий идентификаторы акций на бирже. Ключами словаря являются идентификаторы акций, а значениями – действительные...

Создайте словарь, отображающий идентификаторы акций на бирже. Ключами словаря являются идентификаторы акций, а значениям
Создайте словарь, отображающий идентификаторы акций на бирже. Ключами словаря являются идентификаторы акций, а значениями – действительные...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru