Вы видите копию треда, сохраненную 27 сентября 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Предыдущий: >>1676587 (OP)
Литература:
Автоматизация рутинных задач ч.2 - https://anonymousfiles.io/3CBCoy1o/ <-- тут только одна книжка. Кто может, залейте её на ЯД к остальным.
Ещё книжки: https://yadi.sk/d/HQhhsBsq3TVRUq
Тоже книжки: https://yadi.sk/d/tArKKuQu3Kejuq
Больше книжек: https://yadi.sk/d/H-00n-UG3RSQem
Анон, вместо того, чтобы без разметки постить код, лучше шарь его через специальные ресурсы:
https://ideone.com/ - возможность постить листинги кода и онлайн-запуска, не требует регистрации
https://dumpz.org/ - можно постить листинги, не требует регистрации
https://pastebin.com/ - для листингов, регистрация не обязательна
https://www.codepile.net/ - можно расшарить код в том числе на редактирование, особая полезная опция - чат при каждом листинге, где можно код обсудить
https://pyfiddle.io/ - запуск python кода онлайн, но чтобы шарить, надо регистрироваться
#######################################
ЧаВо: https://github.com/TheKnightsWhoSayNi/info/wiki/Hat Актуальность примерно 2015 года
Вопросы-ответы:
— А стоит ли читать Лутца, том номер N?
Мнения в треде разделены. Кто-то за (очень неплохая база даётся), кто-то против (слишком много воды и объём книг убивает всё рвение). В общем — решать тебе, книга вредна не будет, но ты можешь её просто не дочитать и забросить.
— Стоит ли читать %книга_нейм%, если там питон версии 2.х?
Нет, не стоит. 100% есть более актуальная книга, для пистона 3.х
— А что ещё можно читать?
Питон сам по себе очень хорошо задокументирован и для уровня начинающих, и для продвинутого. Смотри официальную документацию. Можно начать вот с этого https://docs.python.org/3/tutorial/introduction.html
— Есть у кого на примете годный курс лекций по алгоритмам? Формат лекций мне как-то ближе, нежели просто чтение книги.
МФТИшный курс, например, https://www.youtube.com/playlist?list=PLRDzFCPr95fK7tr47883DFUbm4GeOjjc0
— Что можно почитать/посмотреть по многопоточности/параллелизации в питоне, да и вообще в целом?
Очень годный ролик на американском языке про многопоточность и асинхронность https://www.youtube.com/watch?v=MCs5OvhV9S4
— А как учить джангу? Нахожу только книги по джанге 1.х
У джанги отличные доки (одни из лучших для пистоновских либ, имхо), почитай их для начала. Книгу по джанге можно читать и для версий <2, это не проблема, т.к. принципы остаются теми же. Для переката на 2.х хватит changelog`a или тех же самых доков/статей. Начни изучать с разбора учебного приложения с голосовалкой из официальной документации.
— В ньюфаг-треде написано, что нужно начинать с SICP, чтобы научиться программировать
Вот, пожалуйста, та же самая программа, но переработанная под язык Python: http://composingprograms.com/ (нужно знать ангельский или уметь пользоваться переводчиком)
— Можно ли на питоне делать мобильные приложения?
Да, смотри на фреймворк Kivy https://en.wikipedia.org/wiki/Kivy_(framework) https://kivy.readthedocs.io но народ на него жалуется
— Как можно без лишней возни ускорить программу на питоне
1) проверь сначала свой код, алгоритмы и структуры данных. Чаще проблема здесь.
2) код можно иногда феерично ускорить, используя JIT (Just-in-Time) компиляцию. Почитай обязательно про модуль numba, он ставится через pip, и альтернативный интерпретатор PyPy.
— Дайте нормальные книжки на русском! Мы, блядь, не в пиндосии живём
Брат, смотри книжки по ссылкам в шапке, там есть и русские. Но помни, без языка ангелов твоя жизнь проходит мимо и ты обречён быть на обочине знаний и технологий.
ps: анон, если ты вносишь изменения в шапку, оставляй ссылку на код с обновлённым исходником.
текущая версия шапки: https://dumpz.org/aaNRDPe2xXh2
Спасибо, анон.
Это метод класса, а не функция. Можно было сто раз разобраться, пока ты тут спамишь.
https://github.com/TwitchIO/TwitchIO/blob/master/twitchio/client.py#L41
Добра
Пилил приложуху на Джанго, добавил для интерактивности js (ajax). В конце удачного post-запроса мой View возвращает фронту вот это:
return HttpResponse(
____json.dumps(response_data),
____content_type="application/json"
)
И я соответственно вижу на экране вот такую херню с пикрила. Вопрос: с хрена ли? Юзер не хочет смотреть на мой json-объект, он хочет чтобы его обработали и показали ему адекватный html. Как фиксить?
Я не могу разобраться как его использовать. К чему этот метод .get_chatters относится? В документации есть только упоминание get_chatters и все.
С .timeout я разобрался что он работает с ctx.channel как ctx.channel.timeout.
Ничего не понял. Ты может просто по запрос оформляешь как post-отправку формы, а на фоновый процесс?
У тебя html должен отправлять в фоне запрос, получать ответ и запускать скрипт, который ответ будет интерпретировать.
Там джанга есть. Даже не разбирался как в community дебажить. Тут даж в темплейте точку остановки поставил и смотри что хочешь.
Неа, вот ajax-запрос:
https://ideone.com/ydNrMV
Страница не рефрешится и данные сохраняются в БД на беке как и надо. Проблемы видны на фронте
Смотрим дальше и видим что основной класс Bot наследуется от этого самого Client.
https://github.com/TwitchIO/TwitchIO/blob/master/twitchio/ext/commands/bot.py#L47
И тогда вспоминаем прочитанное.
Создал модель A и B
переходя по ссылке в модель A на сайте выводится информация различная и ссылки на переход в модель B
127.0..../A/B - адрес
path(r"^(?P<slug:slug>/<slug:url>)/$", views.ChapterDetailView.as_view())
и при переходе по адресу 127.0..../A/B получаю ошибку 404. что не так?
Регулярка неправильная.
Судя по документации, надо (?P<first>\w+)
Т.е. ?P<name>pattern.
Не знаю, зачем там :, может и надо
Т.е. тебе надо примерно так
^(?P<slug:slug>.+?)/(?P<slug:url>.+?)/$
А если открыть /2ch/, то все ок и выводятся дальше ссылки на переход в /2ch/1 итд
еще вот такое пишется WARNINGS:
?: (2_0.W001) Your URL pattern '^(?P<slug:slug>.+?)/(?P<slug:url>.+?)/$' has a route that contains '(?P<', begins with a '^', or ends with a '$'. This was likely an oversight when migrating to django.urls.path().
да
да, но ошибка 404 не из-за этого. Это предупреждение - рекомендация, чтобы исправить код, не быть обезьяной
чет хуйня какая-то, стак овер говорит, что так и должно быть. А я одни ошибки в ебало получаю. Весь день эту хуиту решаю, этот ебучий /2ch/1/
Я погуглил и там же всё ясно написано.
https://docs.djangoproject.com/en/3.0/topics/http/urls/#example
https://docs.djangoproject.com/en/3.0/topics/http/urls/#path-converters
https://docs.djangoproject.com/en/3.0/topics/http/urls/#using-regular-expressions
А ты понамешал хуйни с разных методов и ждешь что оно заработает.
то есть чтобы программировать на питоне надо что-то читать? нельзя просто брутфорсом перебирать исходники?
Ну может кто и захочет, лол.
Документацию почитай, там регулярки уже со 2-й джанги не используеются
просто path('<slug:slug>/<slug:url>'/SomeShit.as_view())
Page not found (404)
Not Found: /2ch/1/
[17/May/2020 01:12:57] "GET /2ch/1/ HTTP/1.1" 404 1797
Хотя можно с помощью библиотеки по иметации кликов все заебенить, но заебешься и программа должна быть всегда в координатах нужных, да мышкой не подвигаешь сам, когда она работает
А если нет такого, что делать?
Ну и нахрен ваш петон тогда?
А что за программа? Если программа работает через консоль, каковых большинство (ffmpeg, mencoder), то можно сделать обвязку на питоне и спокойно работать. Если чисто графическая прога, то скорее никак, или очень сложно.
Для ffmpeg уже такие инструмены есть готовые.
<re.Match object; span=(0, 16), match='255.255.255.0/24'>
>AttributeError: 're.Match' object has no attribute 'match'
В notepad++ проще блядь фильтрануть, чем пистоном
теперь работает, но матчи хуй достанешь
translation = {97: None, 98: None, 99: 105}
string = "abcdef"
print("Original string:", string)
# translate string
print("Translated string:", string.translate(translation))
Что он куда "перевел"? Логично было бы если б я давал ему словарь по типу {"a": "X", "b": "Y"} и он замещал бы ключи в оригинальной строке новыми значениями. Но эта срань работает максимально нелогично
Это никсовый tr, реализованный несколько через жопу. https://en.wikipedia.org/wiki/Tr_(Unix)
Список одних символов меняется на другие или удаляется.
Формировать словари можно, кстати.
a = 'hui'
b = a.maketrans('hui','abc')
print(a.translate(b))
Ubuntu 20.14, если что. Сурс кидать не буду, потому что в нём кроме этого всё нормально.
*20.04, лол.
Читаю про классы, разбираю пример. Поясните пару вопросов.
1. В чем смысл конструкции self.name = name? Почему нельзя сразу использовать name внутри класса?
2. В чем смысл данной строчки SchoolMember.__init__(self, name, age) в подклассе?
Да, проблема в точке в конце имени папки, судя по всему.
>Почему нельзя сразу использовать name внутри класса
Потому что ты используешь name не "внутри класса" а как локальную переменную внутри одного из методов класса
self это ссылка на сам объект, всегда передается как 1й аргумент в методе (если это не classmethod или staticmethod канешн - там другие плюшки). Поэтому написав del self внутри одного из методов ты просто удалишь эту ссылку, но не сам объект
А как гарантированно удалить объект?.. Вот есть у меня функция
def f(obj):
____del obj
Хочу чтобы она 100% удаляла этот переданный объект (все ссылки на него). Как такое сделать? чую что надо для этого написать свой класс и каким-то образом автоматически сохранять все ссылки на экземпляр внутри приватной переменной в этом экземпляре
https://ideone.com/ayCoOZ
Вызов родительского класса. Но сделано не как у белых людей. Белые люди юзают super().__init__
Идея такая.
Создай вторую структуру, лучше через set, в которой ты будешь хранить имена в нижнем регистре.
Сначала её надо инициализировать
lowered_names = set(x.lower for x in current_names)
потом в цикле делаешь проверку:
if x.lower() in lowered_names:
____lowered_names.add(x.lower)
____current_names.append(x)
В таком варианте никак, это невозможно.
Вот представь, что где-то этот объект хранится в словаре
d['obj'] = obj
Что должно происходить со словарём? А если он хранится как элемент списка?
В объекте можно предусмотреть что-то вроде деструктора. Ты его вызываешь, и объект переходит в блокированное состояние, все его методы переписываются, например. Но это немного извращение.
Получается надо из исходного сообщения надо брать по 2 символа за раз и если эти 2 буквы одна из комбинаций - переводить ее согласно комбинации, иначе переводить по 1 букве, так?
Для начала - как брать из строки по 2 символа за раз?
> Дайте инфу по CPython. Какой функционал он предоставляет и какова его сфера влияния.
когда говорят про пайтон имеют в виду cpython в 99% случаев, это дефолтная реализация языка. Или ты про Cython хотел спросить?
Делешь словари с заменами и в цикле прогоняешь. Сначала длинные, потом короткие.
Как вариант, можно пользоваться методом .startswith
"chto-to".startswith('ch')
но всё-таки как-то криво это немного.
Мне кажется, большого смысла осваивать нет, если у тебя задача только специфичная не стоит. Лучше инвестировать время во что-то ещё.
Их не нужно брать, их нужно заменять.
p ={'aa': 'bb', 'cc':'dd'}
for m,r in p.items():
__s.replace(m,r)
И да, книгу по Си прочесть в любом случае придётся, иначе такой разговор вообще лишён смысла. Причём полноценно так на Си попрактиковаться.
Ты бы код расшарил.
Попробуй слово "podzhopnik", по-моему твоё решение свалится, если на нечётной позиции будет двойная буква находиться. И вообще, перегружено очень...
Сейчас сделаю быстренько
Чет я туплю. Заменил вывод по 1 букве на создание строки. Но на выходе я получаю список из одиночных букв. Что я не так делаю?
>Попробуй слово
У меня пока не полный словарь, я его до буквы Х составил.
На словах с четным количеством букв фейлилось все. Поменял условие на while i < end: вместо while i <= end: b заработало. Твое слово перевело как:
podzhopnik = ['п', 'о', 'д', 'з', 'х', 'о', 'п', 'н', 'и', 'к']
Ну почти.
Сам додумался как складывать строки, можно не отвечать.
Вот такой подход может быть. Тоже говнокод, на самом деле, чисто демонстрация идеи.
Задачка интересная, особенно если её проработь глубже. Например, идеально было бы, чтобы замены работали так:
"Chto eto ne zhopa, a bolshaja ZHOPA"
"Что ето не жопа, а болшая ЖОПА"
Вот как минимум эта история с корректной заменой по регистрам. Совсем класс, если дополнительно словари для слов с "э" прикрутить. В общем тут есть, где развернуться.
Попрошу не нападать, я еще не волшебник, а только учусь.
Каким, в принципе, способом лучше хранить эти хеши и как находить нужный?
Нашел только способ устраивать обычный поиск изображений:
GET https://serpapi.com/search?q=Apple&tbm=isch&ijn=0
Но мне нужно не это. Надо загрузить саму картинку и собрать результаты поиска:
https://www.google.com/imghp?hl=ru
Скинь эти словарики текстом, чтобы не набирать.
Вот есть у меня список url, надо периодически к каждому из них отправить get-запрос а потом собрать полученные данные. Очевидно же, что стоит использовать асинхронки (так как "заспамить" запросами и получить бан не выйдет, все url обращаются к разным ресурсам)
Только вот я не шарю в asyncio, как это мутить?
Я сделал вот так. Решил брать по 3 символа за раз. Работает нормально. Но если длина четная - выдает ошибку ( пик 3)
Как мне свой код пофиксить? Уже первый час ночи, плохо соображаю.
>Но если длина четная - выдает ошибку
Напиши следующий код в консоли а потом глянь, что он выведет:
string = '1234'
print(string[77:112])
неа, ошибки не будет
Уже года два не писал асинхронных приложений, немного обосрался.
И как это сделать для множества url? Через цикл for? (сдается мне что эта хрень блокирующая)
Через треды можно было б делать через ThreadPoolExecutor, но мультитрединг - зашквар
С чего блокирующая?
Делай запрос так. yield from aiohttp.request
Пока идет запрос, идет переключение потока выполнения
Или даже просто await requests.get()
Сап, как проверить какой radiobutton из группы нажат?
https://www.reddit.com/r/django/comments/ghm9jx/we_just_released_the_two_scoops_of_django_3x_alpha/
Отличный вопрос, а библиотеку мы телепатически уже знаем.
Если твоя хеш-функция ведет себя как embedding, т. е. похожие лица выдают похожие хеши, то, например, бинарный поиск. Можно написать версию алгоритма, который при отсутствии искомого элемента приведет к ближайшему слева или справа. Модуль bisect может помочь.
Если хеш это вектор чисел, то посмотри в сторону индексов вроде GiST и GIN
$ 49.95? Да нахуй надо.
очевидно, надо перлолить скрапи, улиточка.
А теперь подумай еще раз, что именно ты делаешь со своей строкой в том безумной цикле while
>— Что можно почитать/посмотреть по многопоточности/параллелизации в питоне, да и вообще в целом?
ну опять это говно?
Удолите
https://habr.com/ru/post/337420/
>ну опять это говно?
Это очень хороший ролик, он демонстрирует сами идеи, лежащие в основе, и сразу с набором кода налету, можно самому попробовать. Причём и треды, и идеи асинхронности одновременно.
Книжки не заменяют таких роликов. В книжках много магии, тебе описывают, как с чем-то работать, но не поясняют, как это работает внутри.
Но книжку может тоже стоит добавить, надо глянуть её.
>мб шапку как-то получше оформить? мб спиздим идеи в соседних тредах? где годные?
Например, где годные? У большинства почти пустые шапки, у некоторых, как PHP, какой-то лес ссылок без пояснения. Лес ссылок можно и самому нагуглить.
Надо какие-то пункты обновить. Про Джанго, уже третья джанга есть, а про это ни слова, никаких комментариев, для чего брать, для чего не брать. ХЗ, я сам третью версию не пробовал.
Это полностью старперский ролик, в котором пояснятся как деды страдали все эти годы, пока не позаимствовали async из С#
Вот предисловие из приличной книги по дотнету:
>Однако если обратиться к сегодняшним книгам и другим ресурсам для
изучения конкурентности, почти все они начинаются с изложения большинства низкоуровневых концепций. Обычно приводится превосходное
описание потоков и примитивов синхронизации, а высокоуровневые
методы откладываются на потом, если вообще рассматриваются. Полагаю, это происходит по двум причинам. Во-первых, многие разработчики
конкурентных программ (включая меня) начинали с изучения низкоуровневых концепций и подолгу корпели над описаниями старых методов.
Во-вторых, многие книги были написаны давно и содержат устаревшие
сведения; с появлением более новых средств книги обновлялись, но, к сожалению, новая информация размещалась в конце.
Считаю, что такой подход неверен. В этой книге рассматриваются только
современные подходы к реализации конкурентности. Это вовсе не значит,
что понимание всех низкоуровневых концепций не принесет вам пользы.
Когда я изучал программирование в колледже, на одном из курсов мне
пришлось строить виртуальный процессор из набора элементарных логических вентилей, а на другом — изучать программирование на языке
ассемблера. За всю профессиональную карьеру я не спроектировал ни
одного процессора и написал всего пару десятков строк ассемблерного
кода, но понимание основ приносит пользу ежедневно. И все же лучше
начинать с высокоуровневых абстракций; на моем первом курсе программирования рассматривался вовсе не язык ассемблера.
Блин, мне кажется вы просто не писали программы с помощью этих всех этих state-machine и select, поэтому вам кажется что круто бы повысить свою значимость среди молодежи и запудрить им мозги.
НЕТ БЛЯДЬ.
>но понимание основ приносит пользу ежедневно
Сам свою цитату читал?
В твоей книжке и многих подобных бахают кучу абстракций, про которые не понятно, как они работают и что за ними вообще стоит. Ты должен тупо как макака пилить код, копируя все эти await, event_loop, future, task и пр., не понимая, что это вообще такое.
Это не старпёрский ролик, это называется "системное обучение". Тебе показывают принципы. Зная их, ты будешь хорошо понимать высокоуровневый код. Причём там даже не про асинк, там про треды в том числе.
Неосиляторы неспособны осилить ролик в 45 минут и разобраться с основами. Программисты, такие программисты.
дед ебаный. Весь прогресс в айти застопорился из-за тебя!
>Ты должен тупо как макака пилить код, копируя все эти await, event_loop, future, task и пр., не понимая, что это вообще такое.
но ведь это есть хорошо!
Зато он никогда не смешает потоки и async-и.
Больше половины проблем в коде из-за того, что люди просто не понимают, как оно работает. Причём в питоне слабая асинхронность, прикрученная со стороны, всё усугубляется из-за этого.
Большинство багов и чудовищно неоптимального кода из-за этого. И освоение медленно идёт из-за этого.
Вот ты думаешь, что определил функцию как async, написал await и получил асинхронность. А хуй. Код как был синхронным, так и остался, это тебе не JS, где в этом случае уже будет асинхронность. В JS правда своя магия есть.
Добрый день, подскажите пожалуйста по связке жанга и вью. При разработке у меня 2 сервера 8000 и 8080 так ведь? А при деплое как это работает? Не понимаю как организовать авторизацию через allouth потому что оно на сервере жанги, а на фронте нужно токен держать.
Че то я запутался =(
Как я понял выдает ошибку потому что идёт обращение к словарю по ключу, которого нет?
> в том безумной цикле while
Я на работе накидал на телефоне новый цикл, ещё более охуенный. Работает теперь как надо и жрет даже символы что не в словаре.
Вечером выложу, оценишь.
ОП Хуй, сразу ОЧЕНЬвидно что автор вообще не в теме пайтона.
язык называется пайтон, пайтон, сука! а не питон блять!
потому что назвали в честь цирка Монти Пайтона, а не в честь змеи дебил блять!
суть в чем: браузер отправляет пост запрос, я нашел его во вкладке network и увидел раздел form data, так вот, как мне отправить этот form data через requests?
извини но нам всем насрать на уебанский цирк, мы называем так как удобно. Ты со своими выебонами можешь сходить нахуй
обращайся
Меня всегда бесили питоновские срезы. Там должен Exception рейзиться для перехвата, а не эта хуйня
Асинхронность в питоне тянет как надо (правда полагаться приходится на сторонние либы). Мультипотокое программирование да - сосет бибу
что там? надо еще запустить цикл перебора этих корутинок
Вроде все даже с коментами, но все равно сложно. Если интересно это отсюда https://www.quantalgos.ru/?p=544
При переходе на 127.0.0.1 он подсказывает урлы из другого проекта. Что я делаю не так?
фигурные скобки убери и перед декларациями функций def напиши. с отступами ты уже справился вроде.
Вот вывод консоли когда запускаю приложение с чат-ботом и скрин urls для этого проекта.
На 3м скрине Джанго предлагает мне урлы admin/ и polls/ вообще из другого проекта
Не так все просто. Да еще декларацию переменных уровня double, int, complex убрать. Но там есть и выражения например for (int k = 0; k <= 31; k++), которые в питоне не так задаются. k++ я хз что такое. Если что я с C# не знаком от слова совсем.
да, точно. всякую двойную хуйню перед декларацией убрать, а цикл чисто перебором рейнджа спистонить.
По хабро ссылке тоже поделка какая-то:
> Корутины содержат операторы yield, с помощью которых мы определяем места, где можно переключиться на другие ожидающие выполнения задачи.
> За переключение контекста в asyncio отвечает yield, который передаёт управление обратно в event loop, а тот в свою очередь — к другой корутине.
Ну и зачем это нужно? Там дальше пример в синтаксисе 3.5, без yield, но вот нахуй нужен непонятный отсыл к yield, когда вообще не понятно, при чём он тут?
Дальше невнятный поток текста, по которому ничего не поймёшь, если не понимаешь. Очередной бесполезный графоманский текст, совершенно непригодный для обучения. В топку.
Лучше самим родить текст небольшой, но только в шапке места для него нет.
может пидарасы с хабра надеются, что им заплатят построчно как в газете.
Вангую потому что regex проверяет url-ы последовательно, там ты где-то и проебался
Книжка с первого взгляда может и норм. Не знаю, как она годна чтобы идеи понять, но говном не смотрится, в отличии от хабра
https://sharefiles.app/download/9e1fa10ad8476c388491cc8c9195d33a7504b58f
ну отличие ебать, переписываем книги нахуй
есть код на пиках
основной поток не хочет разблокироваться, как исправить?
хуй знает надо чекать смотреть, тут никто код из скрина набирать себе не будет чтобы тебе помочь
я бы проверил что sys.exit() норм работает в тредах, а лучше бы заменил на какой-нибудь self.exit() наверняка есть такой
и вообще в питоне довольно просто делается однопоточность нахуя вы эти классы ебашите
http://toly.github.io/blog/2014/02/13/parallelism-in-one-line/
Суть - надо в Windows автоматизировать взаимодействие с java swing/AWT на python 3.x
элементы этих окон через puwinauto не достать, примеров нет нигде
пытался через java access bridge - установил все, загрузил dll WindowsAccessBridge.dll, дергаю isjavawindow с нужным хендлером - и 0, нихуя, нет коннекта
кто то сталкивался? как получить доступ к работающей jwm и взаимодействовать с внутренними gui элементами?
Премного благодарен.
В 3.7 довольно много правок относительно 3.6, об этом речь. Большинство материалов по asyncio довольно старые, в стиле 3.5, где активно таскали loop всюду, не говоря уже об адовых yield from из 3.4.
Короче книжка современная, не legacy. На надо внимательнее глянуть, насколько она для обучения пригодна. В начале как-то воды очень много. Мне кажется, что для совсем новичков в конкурентном программировании она не очень.
Как вообще в питоне с свежими версиями?
Нормально сказать вот я зделол под 3.8, устанавливайте ёпта.
Нет, не всегда нормально. В системе может не стоять 3.8, не всегда хорошо навязывать самую последнюю версию питона.
В ubuntu 18.04 базовая версия 3.6, чтобы поставить 3.8 нужно телодвижения делать, добавлять репозеторий специальный и т.п., и тогда будет два питона в системе. А это довольно частный дистрибутив. PyPy вроде только под 3.6, может частично можно библиотеки от 3.7 прикрутить.
В общем можно, но не очень хорошо. Зависит от того, что и для кого ты делаешь.
>Как-то очень громоздко и прямолинейно.
Нахуярил на одних условных операторах, хули. Зато понятно и работает как надо.
>Скинь код текстом, я покурю.
Куда, например?
Кстати, у меня проблема с транслитом. Буква y отвечает как за й, так и за ы. Точно также как и е отвечает за е и за э. Как с этим быть?
>>693040
>Реально ведь надо ломать мозг над всеми его сложными состояниями. И зачем?
Я наоборот тот код нихуя не понял. Поэтому свой вариант и сделал.
Почему ты не пользуешься срезами? Ты как-то побуквенно собираешь, это совсем не питон-стиль, среды очень мощная фича питона.
> Буква y отвечает как за й, так и за ы
Обычно поэтому j отвечает за й. Вот "ю" можно кодировать как "ju" и "yu", но с этим нет больших проблем, после ы редко гласные встречаются.
Делай просто замену по приоритетам. Сначала варианты "yu" проверяй, а потом уже 'y' как 'ы'
>Я наоборот тот код нихуя не понял.
могу пояснить, если интересно
Бля, забыл исправить, поменяй изначальное значение i в 0 вместо 3.
>>693055
https://ideone.com/QEIIOq
Вот простой вариант, который я предлагал раньше. Даже два.
Тупо сортируем по длине и риплейсим.
Алсо, интересно бы потестировать, насколько это проседает по скорости с вашими проверочками.
Может и интересно, может проверю другой анон
Но не факт, что просядет, re довольно быстро работают. Если строка большая и у тебя много посимвольной магии, это плохо работает. И посимвольное добавление к строке тоже плохо работает, строка ведь каждый раз заново создаётся.
С ре вариант поинтересней, да, там движок отпимизирован как раз под это.
Нужен тот, кому эта параша будет интересна...ну хотя бы как хоби
Ой, что-то я проебался с гиперссылкой. Тред тута https://2ch.hk/gd/res/665838.html (М) Да, хоби -с два б. Быстрофикс
>Почему ты не пользуешься срезами?
не знаю что такое, учу с неделю
>Ты как-то побуквенно собираешь, это совсем не питон-стиль
>я до этого в чистом C немного для себя программировал, там также строки собирал из файла.
>среды очень мощная фича питона.
Что за среды?
>Делай просто замену по приоритетам. Сначала варианты "yu" проверяй, а потом уже 'y' как 'ы'
а как например быть когда e означает и е и э сразу? В словаре нельзя же 2 одинаковых ключа сделать.
>могу пояснить, если интересно
поясни, интересно что за что отвечает.
>>693075
тут какие-то ванлайнеры, даже не интересно. Что делает .items и .replace конкретно?
`1,0-1,2 10,20 30,40.2-50,60-70.9,-80.1 90,-100 -110, -120`
получить строку
`1 0 -1 2 10 20 30 40.2 -50 60 -70.9 -80.1 90 -100 -110 -120`
В конечном итоге нужно из начальной строки получить массив чисел за наименьшее кол-во проходов строки.
Пока что делаю так (3 прохода):
`re.sub(r'(\d)(?=-\d)', r'\1 ', s).replace(',', ' ').split()`
items выдает тупли key-value, replace repace`ит.
Бамп годному вопросу
То что ты пидор ёпта
Ещё раз скрин с кодом >>692070
Магия-1. Создание словаря, это вполне обычный паттерн. Можно и может даже лучше именно явно создать, без этих хаков, так проще просто.
Идея, создаём строки "a b c d e f" и "1 2 3 4 5 6"
с помощью split() разбиваем их в списки
['a', 'b', .. 'f'], ['1', ...'6']
assert просто для проверки, что у нас одинаковое число элементов в массиве, что лажи нет, легко при таком подходе промазать
zip() сшивает два списка в словарь, это стандартная функция питона, полезно знать, глянь в доках.
К началу цикла имеем словарь translation,
translation['sh'] --> 'ш'
Его можно было описать явно.
Дальше уже совсем просто.
s3, s2, s1 - это подстроки длины 3, 2, 1 соответственно. Или меньшей длины, если мы в конце строки.
Сравниваем подряд, если эти строки, начиная с длинной, в словаре замен, делаем замену и увеличиваем счётчик на длину подстроки.
Здесь не очень хорошо сделано, в случае s3 явно прибавляется 3, а ведь длина её может быть меньше. Некрасиво, но ничего не ломает, поскольку такая история только в конце строки происходит. Корректно увеличивать на len(s3), но душа байтоёба-оптимизатора возмущается.
В общем всё просто и читается легко, если на питоне пишешь. Если на питоне пишешь, магия по генерации словаря уже не магия.
Сейчас пытаюсь учиться по одному курсу, увидел там комментарий, мол автор допускает плохую практику.
В курсе автор обучает на практике создания сайта новостей:
Приложение у него одно news.
Вот файл models.py: https://pastebin.com/HAtg2c0s
Вот файл views.py: https://pastebin.com/DvEVejtU
Подскажи пожалуйста, анон, что из вьюхи в данном случае должно бы быть в моделях, чтобы был гуд практис.
П.С. Я подгрузил Bootstrap в <link rel="stylesheet">, может там что найдется, чтобы перекрыть эту ебень?
в css "шарю" на уровне 7классника
Обновление: все работает. Проблема была в неработающем жс-скрипте на фронте (id-шник у поля был не тот и скрипт его не видел)
"Толстые модели" это просто вынесение бизнес-логики в сами модели, чтобы не засирать вьюхи и не дублировать код
Большая часть бизнес-логики тут в кастомном миксине MyMixin лежит. В принципе можно забить хуй и так и оставить
уж не пиздишь ли ты? Как можно прочитать большие книги и ничего не написать?
неужели совсем нечего автоматизировать?
Гляди, я сегодня слепил десктопный обработчик фото.
На неделе попытаюсь "продать" руководству на ЗАВОД в качестве рацпредложения.
Неужели у кого-то возникают эти вопросы? Вагон же несделанных дел должен быть!
import urllib3
urllib3.disable_warnings()
отличается от
requests.packages.urllib3.disable_warnings()
и что лучше?
requests - обертка над urllib и не более того.
Когда был urllib первой версии, то сделать запрос было очень трудно пистонисту больше 3 строчек писать уже трудно, появилась удобная обертка. В urllib3 уже не так все хуево и можно вполне брать на замену.
Операторы "new" как я понял тоже не несут смысловой нагрузки. А вот тут [] int1 = new [32] что квадратные скобки значат?
два месяца. Я, конечно, не показатель и у меня есть опыт программирования на различных языках. Но с другой стороны, в этих долгих годах мало самого программирования было. Я просто Админ.
И реально не понимаю, как можно прочитать толстенные книжки и не придумать как эти знания применять.
Ну с друзьями-кабанчиками поговори! Узнай какие сайты им нужны.
Они, возможно, больше мечтают о гуй-программах, но сайт тоже пойдет.
В данной ситуации я вынужден писать гуй на питоне, потому что из гуевых программистов у нас только пара 1с-ников и они вряд ли справятся с обработкой изображений.
При этом у нас есть еще и php-программисты . Поскольку они дешевы, вся автоматизация сделана в виде веб-интерфейса. Десктоп они тоже не умеют.
По поводу создания словаря из списка понял. А что будет если количество элементов в списке не совпадает?
А основная программа дальше похожа на мою, только у меня проверки на трёх символьные элементы нет .
Но вот что будет с твоей программой если в тексте попадется символ не из словаря? Она же выдаст ошибку, не? У меня же это предусмотрено.
Тут какой-то хрен разошелся и херачит статейки по Киви
>Тут какой-то хрен разошелся и херачит статейки по Киви
Вангую, ты - Юрий Лугадонский.
Но спасибо, глянем.
Питониты хуже жабаскирптеров. Повторяют за ними и везде пытаются свою херню пропихнуть.
Я может неправильно понял, у тебя заменяется , на пробел же? зачем тебе вообще регулярки?
ssh -C -i ~/.ssh/some.pem ubuntu@host 'cd ~/projectname && . activatevenv && ./manage.py shell_plus'
Привет!
Посоветуйте популярный IDE для Python. Я совсем новичок, установил PyCharm, но мне оказалось сложно в нём разобраться. Например, я не могу сменить дефолтную директорию Scratch-файлов, в которой у меня кириллица, и из-за этого есть проблемы при запуске батников. Я не прошу совсем примитивного инструмента - просто более дружелюбного.
Подскажи за структуру проектов/приложений в джанго.
Порядком подзаебался разбирать каждый отдельный "ДАВАЙТЕ РАССМОТРИМ НА ПРИМЕРЕ" пример. Можно как то формальное описание получить?
Тогда оставь одно что-то. По-идее - неважно что заюзаешь, все равно это у urllib3 юзается.
Зачем тебе иде? Отупеешь ведь. Юзай vs code. Не сильно сложно, не пишет код за тебя. Как освоишься и не будешь совсем новичком, то тогда решай: pycharm или vim.
Ну я подумал может есть какое-нибудь правило хорошего тона делать через импорт или через реквест. Спасибо
Но ведь это всё равно будут разные инстансы, лол.
Если ты хуяришь напрямую через урллиб, то делай урллиб, если через реквестс, то через реквестс.
Нет. Это не жс
Жопаскриптеры хуже. Но только лишь потому что многочисленнее
Какую капчу решать собрался? От этого зависит часть подводных камней.
Для себя решил делать или сервис какой?
Для автоматического решения капчи-зображения есть сервис, качество не очень.
Да в целом где я сижу только рекапча и заёбывает. Для начала конечно для себя потом если всё пахать будет продавать начну для спамеров хех. Юзал и сервисы и расширения в браузерах, но они действительно не очень.
Пока что придумал так:
def decorator(func):
....def f(args, kwargs):
........return func(args, kwargs) # здесь что-то осмысленное
....return f
@decorator
def g(some, arguments): ...
Но выглядит гадко. Лучше нельзя?
Я имею в виду, кто это должен читать. Человек? Интерпретатор?
Да и кто придумал это говно -*-
Это Legacy из второй версии питона. Забудь, зумер, а то кошмары по ночам сниться будут. За тебя деды воевали, живи счастливо без этого ужаса.
Читает это вм через которую ты запускаешь свой код. Нужно это для того, чтобы текст который ты выводишь выводился правильно на любой локали.
Для рекапчи есть либа на гите, для распознавания при помощи аудио.
Хз как она работать будет с рекапчей3.
А тут нуб взялся её забороть, ага. Самый верный метод это решение обезьянками за копейки.
Через эту либу работает аддон для браузера о котором я говорил. И последние месяцы работает он архихуёво, где-то 1 раз из 10. Потому и хочу запилить что-то надёжное.
Ага, готовь свои шекели, сучёнок. Скоро будешь постить в /b 300к постов/наносекунду.
Бамп посту
Посмотрим.
Так вот - как в таких условиях лучше хранить список? Использовать pickle или просто хранить содержимое списка в файле и дописывать в него по необходимости?
Если данные не критически важные и работа с файлом ограничена только записью/чтением то можно и базовыми средствами обойтись.
А как?
[{'Value': 'test0'}, {'Value': 'test1'}, {'Value': 'test2'}, {'Value': 'test3'}, {'Value': 'test4'}, {'Value': 'test5'}]
Мне его надо привести к списку значений, при этом исключив из него заранее заведенный список исключений
Список исключений:
['test4', 'test5']
Что я хочу получить в итоге:
['test0', 'test1', 'test2', 'test3']
Как мне это сделать?
Чё несёт. Какой словарь y? А если у него [{'Value': 'test0'}, {'Value': 'test1'}, {'Value': 'test0'}]? А порядок как сохранить?
Надо будет часто обращаться к списку и редко добавлять/удалять элементы.
Базовыми - это какими?
МЫ ВАМ ПЕРЕЗВОНИМ
Это примерно эквивалентные вещи. В одном случае риск не успеть записать файл, в другом риск не успеть записать обновления.
Чтобы избежать риска, когда ты удалил старый файл, а новые данные записать не успел, можно простой паттерн использовать:
старый файл имеет имя, условно, dump.pickle.123
сохраняешь новый файл в dump.pickle.124
если успешно, старый удаляешь.
Причём так можно хранить, очевидно, несколько последних версий.
я хуй его знаю, не могу скачать с твоего рапидшера
isisnstance же для проверки типа данных, зачем он тут?
И да, посмотри ещё на такую фишку, как сигналы. Это актуально для линукса, в винде может быть хитрее, там что-то работает, что-то нет.
Ты большинство сигналов о закрытии программы можешь перехватить, сохранить в этом момент данные, и после этого уже закрыть программу полноценно.
мне всегда нужен был десктопный обработчик фото с драг&дроп. давай на гитхаб, ёба не жмись.
Итак, день прошел зря, но я пытался узнать как это все делается.
Получается мне нужно реализовывать аутентификацию в социалочку непосредственно на vue, потом получив токен от социалочки, отдать этот токен в жангу, чтобы она там работала с логикой и че ей там еще надо, потом отправить на фронт собственный токен самой жанги, которую сохранить во фронт сторже.
На сколько я понял. Жаль что под мою социалочку незапилен модуль на vue вот под всякие инстаграммы есть и под вк есть.... Но встает другой вопрос. Если я делаю на фронте авторизацию, то мне надо указать свои id и secret key от апи авторизации в социалочке, разве это безопасно?
ты просто хуяришь баззворды и мы не понимаем о чем речь
что такое токен в социалочку? какая разница вью/невью? ты оауф делаешь и хочешь авторизацию прогнать без бека?
>>694043
Ну окей, вкатывальщики-квакивальщики.
Релизю приложение для обработки фото и прочих хренотеней !
https://github.com/pavlozt/kivyphotoenhancer/
Возможно, кого-то вдохновит на большие свершения. А то пишете все какую-то поебень, ей богу.
Если русские буквы интерфейсе уплыли, надо ставить python 3.7+ и настраивать переменную среды PYTHONUTF8=1 . Так вот в этой винде.
Когда-нибудь эта хуйня закончится...
Хочу научиться работать с библиотекой vk_api, вернее у меня есть идея, которую хочу реализовать для бота в сообществе.
Но, начинать надо с чего-то простого, что у меня не получилось.
Объясните плз, как можно элементарно с помощью бота отправить, например сообщение самому себе? А то просмотрел несколько источников, на одном источнике была подобная информация, но данную функцию тупо выпилили с какой-то там версией vk_api.
Будьте добры, напишите код, (я знаю, что там строчки 3-4 должно быть, пролема в знании методов), ии подкиньте доков читабельных
Делается так же как и отправка обычного сообщения, просто жестко задай ИД человека которому писать хочешь.
+ На сколько я знаю, у вк_апи есть чат в телеге с активными юзерами, можешь залететь туда.
стратегически,тебе выгоднее изучить pandas и оставить файл в csv.
загружай и там манипулируй данными.
Эта библиотека все равно на Си написана и к скорости не должно быть претензий.
такой паттерн называется rate limit, по нему гуглится. конкретно в drf это называют тротлингом https://www.django-rest-framework.org/api-guide/throttling/
Ебать ПАТТЕРН.
from itertools import chain
data = [{'Value': 'test0'}, {'Value': 'test1'}, {'Value': 'test2'}, {'Value': 'test3'}, {'Value': 'test4'}, {'Value': 'test5'}]
exceptions = ['test4', 'test5']
items = chain(*map(dict.values, data))
result = [item for item in items if item not in exceptions]
Внутри html - как нехер, в том числе и внутри js-кода, вот так например:
<script type="text/javascript">
var a = "{{someDjangoVariable}}";
</script>
А внутри js-файла есть возможность это сделать? Потому что они у меня длинные и я прикрепляю их как белый человек в <script src="static/main.js"></script> ?
Другой анон дельное советует, может на самом деле стоит использовать nginx, там есть всё для этого.
Смотри сюда:
https://nginx.org/ru/docs/http/ngx_http_limit_req_module.html
"зона" - это зона разделяемой памяти между процессами nginx, про них надо знать, что зон может быть несколько и у них должны быть уникальные имена. В том смысле, что зоны могут и для других целей использоваться, для кешей и т.п.
Я этим не пользовался правда, лепил когда-то свои велосипедные решения, правда не на питоне.
В nginx, судя по описанию, для разного типа url можно задать разные настройки, гибкость есть.
При желании ты можешь сам что-нибудь накрутить на уровне джанго, но думаю, этим стоит заниматься только если у тебя логика сложная.
Ну эмбедь все настройки в script или там делай xhr за ними после загрузки.
А статика она и есть статика.
По api отдавай переменные, или json портянку в index.html
Еще один вариант - sqlite. Есть в стандартной библиотеке, все хранится в одном файле, встроенная защита от выключения программы или вылетевших пробок. Из неудобств - понадобится отдельный слой с SQL.
Слишком сложно. У фронта не будет оставаться никакой важной информации, доступной скриптам, работающим с твоего домена. Никаких хранений в local storage и т. д. - это слишком легко украсть. У твоей социалочки есть документация, как к ней подключаться?
Вроде и так нормально, есть либа django-cors-headers, настроена как указано у них в репе (приложение, миддвер, origin_allow_all = True). В какой-то момент она просто сама наебнулась
Ты небось пытался использовать аутентификацию, с такими настройками не будет работать.
>А при деплое как это работает?
Можешь держать 2 сервера при деплое, можешь сбилдить проект на вью, а джанго будет раздавать его как статику
При чем аутентификация? У меня сами запросы просто ебнулись. Работала регистрация, а теперь просто нахуй шлет
Идет запрос, сервер отвечает списком сайтов, которым разрешен доступ, но у меня блядь всем разрешен доступ с помощью CORS_ORIGIN_ALLOW_ALL = True
Идет запрос options к серверу, а в ответ я получаю нихуя, а в браузера висит "Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://192.168.1.14:8000/api/users/. (Reason: CORS request did not succeed)." Но проблема в том, что эта хуйня работала какое-то время назад
Укажи свой хост явно, разреши пересылку кредлов. Возможно поможет, так как причин может быть много.
CORS_ORIGIN_ALLOW_ALL это выключи, CORS_ORIGIN_WHITELIST = ['адрес сайта'], CORS_ALLOW_CREDENTIALS = True
Хотя насколько помню, там сообщение об ошибке другое, скорее всего не в этом проблема.
>>694422
Поменял, та же самая хуйня. Вот если что сами настройки джанги, касающиеся корсхедеров. Последнее уже выдрал с стаковерфлоу https://pastebin.com/XNz9JsjW
Бля, побилось. Точка перед звездочкой кароч.
учи кобол
Лучше хтмл
> Смотри сюда:
> https://nginx.org/ru/docs/http/ngx_http_limit_req_module.html
> В nginx, судя по описанию, для разного типа url можно задать разные настройки, гибкость есть.
А вот и нельзя, лол. Там же только ip, а не произвольный элемент.
Тот самый анон.
Но есть Великий Китайский Nginx Openresty, где это делается довольно элегантно на lua с применением этих же механизмов зон.
Зависит от серьезности лавочки, короче.
А, не, можно, но непонятно как выудить переменные из post или элементы json. Вот зачем тут нужен lua.
Так что во многих случаях порезать скорость в nginx - отличная идея
Ну так ты можешь поставить лимит на количество запросов какого-то url для разных ip. И получаешь дешёвую защиту о ботов, которые высасывают информацию с твоего сайта в много потоков.
Если какую-то сложную логику реализовывать, то проще уже сразу на уровне джанги. Может ты там хочешь, чтобы разные виды запросов на один url имели разный вес, и у разных групп пользователей были разные лимиты? И ещё попутно статистика какая собиралась?
В nginx прикрутили javascript, и вроде можно как раз подобные задачи через него делать. Не пробовал. Глянь на это.
https://nginx.org/ru/docs/njs/index.html
блядь, как бесит эта пизданина.
lua то много лет,а они ради говноедов js тащат.
в Самом Большом в Мире Китайском Интернете вообще только на lua и пишут.
Пишут, что lua паскалеподобное говно, а nginx за js.
https://habr.com/ru/company/oleg-bunin/blog/420465/
Надо бы добраться когда-нибудь до этого и заботать.
Да, точно! Прости мне мою невнимательность
Парсер съел по одной звездочке перед args и kwargs.
Прочитал от корки до корки Dive into Python 3, всё написанное полностью понял. Что делать дальше - не пойму. Цель - фриланс на США. Или хотя бы работа самая простая, тоже в США. Понимаю, что хоть и разбираюсь в многом уже и в принципе смогу нужные библиотеки быстро выучить, всё равно в данном состоянии нигде работать не смогу. Куда копать чтобы хотя бы какую-то копеечку получилось поднять? Нужен хоть какой-то самый простой проект, по типу парсинга блять фанфиков. Хочу развиваться не в вакууме, а на реальных заданиях которые будут востребованы, с которых я смогу получать деньги. Есть идеи куда смотреть и что делать? Большое спасибо, анон. Английский нейтив. Могу и ирл, но предпочтительнее конечно же хоть за сильно меньше, но фриланс. Плюс с рынком работы США не знаком нихуя.
Смотри вакансии и то, какие там технологии используются. Чистый питон никому не нужен вообще. Нужны технологии. Нужно уметь работать со сторонними сервисами вроде DB, MQ и др.
Ты в самом питоне хорошо умеешь тестирование, модуль logging, asyncio? И не только это.
Веб фреймворки? БД? MQ?
Представть проект, который мог бы быть полезен и попробуй сам сделать.
>Олег Бунин
> не создал ни одного Продукта
>10 лет делает вид, что дохуя умный и стрижет бабло с менеджеров топов
> — Уже существует готовый сторонний проект OpenResty. Если не вдаваться в подробности, то это, по сути, nginx + Lua, но он имеет архитектуру, которая идет вразрез с nginx. Мы хотели избежать пересечений с этой экосистемой.
Они хотели продолжать стричь бабос с nginx plus и дать возможность нанимать яваскриптомакак.
Но в lua нет ничего сложного и он фантастически быстр.
>Представть проект, который мог бы быть полезен и попробуй сам сделать.
Займусь
В самом питоне почти ничего не знаю, так как кроме книги и попыток что-то годное написать не делал с ним ничего. Опять же, трудно писать что-то, когда понимаешь, что оно не пригодится в работе.
От требований на сайтах становится не очень. Даже не беру в расчёт опыт работы, просто дохуя там. То в веб уклон сильный с Джанго, то в дата аналитику. Но там по 5 лет опыт просят, поэтому и ищу чтобы начать где проще порог входа. Мне бы начать с чего-то. Вот как в тестинг мануальный можно вообще вкатиться за неделю, дальше переходить на автоматический и т.д. Вот мне бы что-то похожее в питоне, а не тестинге. С чего-то начать, что уже сейчас было бы хоть кому-то нужно, и дальше улучшаться.
Скажи как в тестинг вкатиться за неделю? там такие же хрюши сидят "алло 500 лет опыта нет? вы нам перезвоним"
Я про ручной говорю, тыкать в браузере блять баги искать. Не про физически пойти работу найти, онлайн же.
А с чего это ты взял, что она тобой освоена, лол?
Так в чем трудность? Подробнее расскажи, а то не угадать, ты там не знаешь как if написать или тебе свой йоба диспетчер нужен под это дело.
Для каждой комбинации (ref+description) требуется свой обработчик. Всего их на данный момент 8 (скоро могут появятся новые или наоборот что-то будет удалено). На первый взгляд стоит в отдельном модуле типо utils их написать, но как быть дальше? Как "привязать" каждого обработчика к своему instance из модели? Сидеть и вручную в shell это делать? Просто вопрос времени, когда я таки совершу ошибку и буду не понимать, хрен ли оно не работает как надо
Первое что пришло в голову: при сохранении экземпляра переопределять метод в котором обрабатываются данные, как-то так
https://pastebin.com/T5DkSnpq
Если твоя обработка состоит в различиях при выборе - ебни по менеджеру для каждого из типов
в твоем понимании "вкатиться" = делать что -то для себя?
Я просто думал что вкатиться это выполнить "работу" для кого то
>>695061
Что мне также недавно пришло в голову: назвать обработчики определенным образом. Затем внутри модели определить метод handle, который на основании значений self.ref и self.descr найдет нужный мне обработчик (бизнес-логику намучу, это не проблема)
Вопрос на данный момент лишь таков: как блэт этот обработчик мне импортировать в мой метод handle? Есть 2 варианта: использовать
import module_name
vars(module_name)
и перебрать ключи, либо использовать что-то типа:
mod = importlib.import_module(module_string_name)
handler = getattr(mod, name)
Какой из методов будет рациональнее и быстрее?
Не помню как точно, но просто переопределяешь метод на выборку, внутри можешь вызвать каждый из менеджеров, а потом склеить все полученные данные в 1 список и вернуть
>TypeError: can't pickle _asyncio.Task objects
Это что выходит, при использование asyncio нельзя пользоваться pickle?
Вот у меня есть бесплатный pycharm, который сразу создаёт виртуальную среду для проекта и я могу через настройки проекта найти необходимые библиотеки и скачать в проект, а затем использовать
А могу вводить всю эту поеботу черед командую строку вручную.
Есть какая-то принципиальная разница между двумя способами? И почему везде в офф документации или туториалах (например Джанго) пишут через командую строку?
> И почему везде в офф документации или туториалах (например Джанго) пишут через командую строку?
Потому что это стандартный способ. Пичарм просто автоматизирует его.
Добра тебе анон
while True:
____do_something()
____time.sleep(1)
или
while True:
____do_something()
____await asyncio.sleep(1)
или модуль sched, но фактически это как в пункт 1
Или сигнал alarm в линуксе, но это неправильный подход.
Ты задачу опиши для начала
vars?
А есть кстати другой метод получить переменные модуля/класса? А то в модулях много builtins говна, мешается
sleep не начнется раньше завершения do_something, потому что они работают линейно. Если он занимает минуту, то о чем говорить?
Хотя если у тебя задача на три копейки типа пару раз в минуту качать что-то с сайта, то и такое сойдет.
Запуск в отдельном процессе
Запуск посредством Celery (overkill)
Либо
while True:
____do_shit(shit()
____await asyncio.sleep(60)
aiofile
>Зачем асинк для этого?
Если у тебя только 1 задача в скрипте - незачем, если есть что-то еще - то обычный слип будет блочить выполнение всего кода
Всё зависит от того, что делает твоя программа в перерывах между тайм-эвентами.
Один вариант - когда ты делаешь небольшую задачу, таскает данные с сайта, сохраняешь статистику в файл и т.п., а в промежутке ничего. Тогда проще всего sleep.
Если у тебя скрипт всё время работает, но раз в сколько-то ты что-то делаешь, что тогда или async, или что-нибудь ещё, варианты могут быть.
Ещё зависит от того, насколько точно тебе надо интервалы выверять.
Всё это стандартные задачи и для каждого типа есть стандартные решения. Но разные.
Проще всего, внезапно, с модулем threading.
Но это перестанет быть проще, когда ты добавишь туда что-то еще
Это, ведать, для лентяев.
Автор API предоставляет услугу, которую бесплатно ты должен был предоставить себе сам.
Так же как ремонт автомобиля - бесплатно могут дать совет ремонтироваться в их мастерской.
На этом перечень бесплатных услуг исчерпывается.
Но почему бы не сделать переводчика, НЕ использующего интерфейс API, а чистый HTTP ?
Потому что я не знаю хттп, как тебе такой вариант? Ну так что насчёт апи то? Есть чего?
Ты знаешь, я сейчас проверил, а мой клиент Гугл-переводчик не работает. Я бросился смотреть на страницу переводчика - она уже совершенно другая.
Открыл в IE, а Гугл требует войти в аккаунт - чё за хрень, через Хром захожу на переводчик без никакого акаунта ?
Так что у меня теперь нет переводчика и значит программы, которые его использовали, накрылись тоже.
Насколько я сегодня нагуглил - Гугл сделал свой апи платным недавно и все сосут хуй кто бесплатно переводил.
Это палка двух концов: Если платный сервис - его функциональность будет гарантироваться.
Если, как бы украл (мой клиент не использовал никаких АПей), то это бесплатно, но... в любой момент они могут изменить что-то и программа накрылась.
Покупать, если тебе клиент-переводчик нужен раз в год - смысла нету.
Поэтому, стоит внести изменения, согласно всем ихним новшествам и прежним курсом пока опять не поменяют.
У меня клиент работал на технологиях COM и DOM, но для этого необходим IE. С ним последнее время проблемы - то старая версия облаком не поддерживается, клиент облака делал, пуд говна съел, прежде чем победить. То в кабинет телефонного провайдера не могу войти - новый сертификат сайта не поддерживается.
На свою старую систему новый IE не ставится, поэтому перенёс клиент кабинета провайдера на планшет с 10 системою - сертиыикаты https есть, клиент работает. Теперь переводчик накрылся, надо переносить тоже на планшет, а на 10 системе IE не установлен.
И вообще 10 система - сволочная штука. Целая эпопея борьбы. И она только началась - её предстоит обкарнать по самые яйца. И от предателя-системы безопасности, и от изменника родины планировщика заданий. Надо будет выявить где эти файлы, пользующиеся преступной неприкосновенностью и зайдя с внешнего диска - ампутировать их в пизду.
И всяк его будет стрематься и поносить.
Ибо насильно мил никто, пока что не стал и НИ - КО - ГДА НЕ СТА - НЕТ !
Советую вместо принтов юзать logging. А так код нормальный. У новичков неосиляторов основная проблема, то что они не знают с чего начать и как построить архитектуру проекта. По твоему коду же видно, что опыт есть.
Ты где там архитектуру разглядел в этих 100 строчках, среди которых полезных около 50?
АРХИТЕКТУРА ПАТТЕРНЫ РЕФАКТОРИНГ
slovar = {
'kluch': 'znachenie',
}
print(slovar['kluch']) - вот так все норм
print(f'bla bla {slovar['kluch']}') - а вот так уже ошибка.
Мне обязательно нужно сперва упаковать элемент в переменную, а в стринге обращаться уже к ней? Это ж очень нудно, нах мне тогда вообще писать этот словарь, если все равно для каждого ключа нужно отдельно писать переменную, я это могу и без словаря сделать. Может еще какой способ есть?
Програмач ай нид хелп.
Укус питона прочёл, Hello World написал.
Написал говнопрогу, которая приветствует тебя, просит ввода имени и возраста и в зависимости от этого оскорбляет тебя.
Какую книгу читать дальше? желательно с примерами т.к. хочется практики.
Можно подробней? Не понимаю в каких именно скобках ошибка и как я могу их изменить, я думал для каждого элемента вполне конкретные скобки используются.
Есть дохуя видов скобок, все они взаимозаменяемы.
Одинарные 'str' и "str" и тройные '''str''' и """str""".
Если какие-то используются у тебя в строке, то оформить можно другими.
В твоем случае можно сделать
print(f'bla bla {slovar["kluch"]}') или наоборот.
Ох лол, да.
sudo apt install postgresql postgresql-contrib
Я подумал на досуге и нахуярил вот такую реализацию "сигнальной" функции, которая раз в n секунд вызывается и совершает некую небольшую операцию. А основная функция, которая потребляет много ресурсов CPU, идет фоном, пока не выполнится: https://ideone.com/tpaOTQ
Реализовано на тредах. Какой-то ощутимой просадки по производительности не заметил. Но уверен, что есть способы и лучше. На асинхронках можно что-то подобное намутить? А с помощью какой-нибудь левой либы?..
Ну и нихуя!
Не открывает мои экселевские файлы.
File Load Error for testme.xlsx
testme.xlsx is not UTF-8 encoded
И так все файлы. Что я их экселем создаю, что через pandas.to_excel.
Хорошо что хоть csv открывает.
Нагуглить ничего толкового не смог.
Неужели придется anaconda ставить чтобы совсем уж по-ихнему было?
>Какой-то ощутимой просадки по производительности не заметил. Но уверен, что есть способы и лучше.
так ее и не будет, лол. Оверхед на потоки слишком низкий. Многие программы на тредах и всем норм.
Сначала нужно определиться, что для тебя лучше.
В твоем коде нихрена не происходит кроме print.
Никакого совместного доступа.
Соответственно, ты не занимаешься никакой синхронизацией и проблем ты успешно избежал.
Вот, допустим, мой пример : >>694094
Он работает потому что там "волшебная" синхронизация от kivy через декоратор @mainthread
В серьезных случаях были бы проблемы.
(кстати, на самом деле киви работает из без этого. не понятно почему, но я на всякий случай пишу. как у них в документации это написано лет 5)
да харош. смысл этой программы был показать, что kivy - довольно просто и пора бы новичкам переходить от заманавших всех телеграм-ботов к полезным программам.
это чтобы в фотошопе не мучаться. Фото часто надо обрабатывать, но сами манипуляции шаблонные . Посмотри как это выглядит в фотшопе:
https://pskurs.ru/photoeffects/avtomaticheskaya-korrekciya-urovnei-v-photoshop.html
У меня на производстве продукцию фоткают перед тем как отправить клиентам зеркальным фотиком и получается плохо.
Я как буду рабочих-дуболомов обучать в консоли что-ли работать?
Поэтому сделал гуй.
На самом деле там еще (будет) сжатие фото до веб-разрешения и загрузка на сайт к конкретному заказу.
То есть это автоматизатор кнопки "авто" в фотошопе средствами сторонней проги? Ну заебись, хуле, и гуй красивенький.
Можно конечно циклом перебирать
B=[]
C=[]
for i in range (len (A)):
A = A
C.append(A[-1])
Но хочется сразу индекс.
> неужели совсем нечего автоматизировать?
Если только написать программу, которая наримана током от компа коротнет, лол.
В конце концов, не все же такие кабанчики занятые. Мне вот обработчик фото нахуй не нужно, тебе наоборот. Время такое, для моих потребностей например уже все написано.
Получилось, спасибо. Ни разу с таким индексированием не сталкивался.
Тебе обязательно использовать ndarray ? Если вместо обычного списка в начале и в списках внутри использовать numpy.array() то все работает.
np.array([np.array([1,2,3]),
np.array([1,2,3]),
np.array([1,2,3])])
> Тебе обязательно использовать ndarray ?
Не то чтобы очень, но формат задает чужая функция. Перебирать её во много раз сложнее чем пердолиться с индексами.
Нет, я и имел в виду работу для кого-то. Мануальное тестирование - для вката достаточно полной недели и можно зарабатывать деньги - я тому пример. Только деньги всё же не такие огромные, и заниматься этим постоянно не импонирует. Развития там так же не много, да и куда развиваться. А питон, это другое. Но здесь порог входа на любую работу мне кажется намного ввше, поэтому и растерян.
Как исключить все смайлы из перевода, если они в контексте чата состоят из простых слов?
Самый очевидный и тупой способ - добавить все смайлы в исключение не проканает. Их не фиксированный набор, у каждого стримера есть свой уникальный пак.
Часть смайлов я отсек проверяя слово на количество заглавных букв - если их больше 2 в слове - оно игнорируется. Но это отсекает только смайлы, состоящие из двух слов. Та же Kappa будет проходить
Ещё часть отсек проверкой на наличие цифры в слове.
Есть идеи как отсечь остальные смайлы?
Ты его копипастом переводишь что ли, как сообщения получаешь? Получаются сообщения через вебсокет, в каждом сообщении отражается не только его содержание, но и доп. информация в т. ч. и используемые смайлы.
Проблема только в том, что есть еще и расширение bttv которое добавляет свои смайлы, поэтому тебе их отдельно парсить нужно будет в зависимости от канала. Может у них api есть.
> Ты его копипастом переводишь что ли, как сообщения получаешь?
За основу своего бота я взял twitchio. Он сообщения получает в виде простого текста вида "какой-то текст Kappa" и смайлы никакими служебными знаками не отображаются.
> Проблема только в том, что есть еще и расширение bttv
Эта хуйня только новые смайлы добавляет в твич?
И зачем? Для практики как рах полезным будет не использовать сторонние библиотеки, которые напрямую решают задачу. Это тоже самое, что написать калькулятор в виде вызова системного калькулятора. Ну а хули, "у меня обертка".
Ничего сложного в твоей задаче нет. Подключаешься к нужному вебсокет каналу, парсишь оттуда сообщения, переводишь и выводишь результат. Bttv эмоуты установленные для конкретного канала можно посмотреть на сайте, т. е. перед обработкой сообщений канала тебе нужно будеи спарсить названия смайдов с этой страницы.
Где ты такую вакуху нащел что без опыта взяли... а как же тестовое с "ой ну вы не все баги нашли идите нахуй"
Будет задача, будут решения.
Первый вопрос в том, ради чего ты прерываешь исполнение.
Вот в твоём примере, у тебя есть содержательный и важный код:
def do_shit() -> None:
____'''Эту функцию будет вызывать другая - "сигнальная" функция'''
____print(f'Shit called at {time.perf_counter()-START}')
____print(f'Shit got: {random.randint(1,1000)}') # имитируем какую-то херню
Насколько пользователям программы важно, чтобы эти строчки напечалались друг за другом? Ты ведь понимаешь, что у тебя переключение потоков может произойти в любой момент, эта функция не атомарна, и в момент МЕЖДУ принтами может что-то произойти? Исполнение переключится куда-то ещё, другая функция что-нибудь напечатает. Оно точно устраивает?
Как говорится, добро пожаловать в мир многопоточного программирования.
В случае async-await такой проблемы нет. Переключение в предсказуемый момент. Правда если у тебя тяжёлая фукнция, то тебе надо явно разрешать переключение в какие-то моменты.
Вариант: ты просто раз в сколько-то итераций тяжёлого цикла запускаешь
await asyncio.sleep(0)
что разрешает переключение задачи на другую.
Ну не скажи, элементарного бота сделать думаю не сложно. Но один хуй будешь по гайдам делать и мало чему научишься. А так я по тихоньку ковыряю твичио, дописываю и обучаюсь питону.
>ну и чего, используешь свои фреймверки, так ничему не научишься, надо самому писать всю обработку, и орм самому пилить. Атак лютая копипакста получается просто
есть тупой и стандартный паттерн: в лог добавляется ИД задачи-треда и перемешивание вывода никого больше не ебет.
И можно еще нескучных эмодзи добавить.
Речь идёт именно о практике и обучении, да для практики и обучения полезно писать всё самому. И глубина начала зависит от того уровня знаний который ты хочешь получить.
>>697399
В том то и дело, что гайдов никаких не нужно. Достаточно проанализировать запросы и повторить их из своей программы. Ковыряя чужой софт ты обучаешься не питону, а работе с API этого софта.
Ну короче как выделяешь строки, жмешь таб, они улетают на уровень глубже. А как наоборот?
Если кстати реализовать тот пример через async и делать await asyncio.sleep(0) после каждого числа num в цикле for, то время выполнения увеличивается в 3 раза... решение которое помогло: сделать в том месте строчку
if num % 10000 == 0:
____await asyncio.sleep(0)
но вопрос, фиг ли переключение контекста настолько сильно ебет остается открытым
shift + tab
for x in result:
par = dict['u']
p = {
"Parent": par
}
Ты просто сам подумай, сколько работы должно совершиться для переключения контекста. Там надо идти в event loop, ставить задачу в планировщик и т.п.
Естественно думать надо. В конкурентном программировании в любом случае думать надо. А как ты хотел?
Для моего ноутбучного проца переключение требует на уровне 10 микросекунд. Если uvloop подключить, раза в 2 ускорение, pypy ещё сильнее, но даже pypy 2 микросекунды на простых примерах.
Что у тебя две задачи, что сто тысяч, примерно одинаковая история. Сто тысяч - это я когда-то тесты синтетические делал, столько задач тянет, но на практике это смысла не имеет.
Зачем тебе переключаться 100 тысяч раз в секунду? Делай так, чтобы вычислительные задачи могли передать исполнения 10-100-1000 раз в секунду, в зависимости от твоего приложения.
В полноценных приложениях вычислительные задачи должны в отдельный процесс, не поток, а процесс выноситься.
Ты пишешь хуйню которая с легкостью отпугнет любого изучать. Если ты это делаешь намерено то пошел ты нахуй токсичная хуйня, если ты делаешь это для защиты своей самооценки, поищи другие способы сохранить свое чсв не через унижение попыток других.
Применяя инструмент, попутно можно понять как он работает, ты же понимаешь что в шариковой ручке крутится шарик?, а вот твои "это все не то, надо писать все с нуля" уничижают стремления юнцов и вгоняют их в "я тупой юзаю готовое" состояние.
>Ты просто сам подумай, сколько работы должно совершиться для переключения контекста. Там надо идти в event loop, ставить задачу в планировщик и т.п
Блядь, надоели уже.
Вы откуда лезете? Из Яндекса или Амазона?
Ребятки, достаем ручки и листочки, открываем Методичку:
>Preallocated virtual memory is a staggering ~80 GB (due to 8 MB stack space per
thread!), but resident memory is only ~130 MB.
это реально имеет смысл если ты пишешь какой-то суперплотный сервер, но в действительности ты своим кривым sql положишь сервак намного раньше.
О посоветуйте архитектуру вот какой штуки:
я хочу забабахать некую Аналитическую Платформу :
на сервере крутить подготовленные мной jupyter notebooks чтобы конечные юзеры не могли их менять, не могли скачать реквизиты доступа к данным в sql или других api, не могли скачать элементы нотебуков распиханные в py-файлы.
Но могли конструировать самостоятельно графики, что-то отфильтровывать, скачивать готовые отчеты себе в эксель и тд.
То есть, как бы веб-интерфейс без джанги.
По сути это будет замена metabase, который себя не оправдывает.
Это типичный корпоративный ебенейших размеров софт на яве, который, в общем, не делает главного. Непонятная хуйня какая-то. Создал там кое-как пару таблиц, поебался с mysql tengine=federated, но все равно неудобно. А с графиками вообще пиздец.
Ну да, вариант "сам был новичком и научился на своих ошибках" почему то даже и не рассматривается. Одни попытки унижения и детекты токсичности. Узнаю забитого омежку с двача.
В любом случае, я просто высказал своё мнение, он может его послушать и сделать свои выводы. Какие - мне абсолютно похуй, для меня ничего не изменится всё равно.
У меня A= [array([100, 200, многа чисел]), array([300, 400, многа чисел])]. Твой код выдает array([300, 400, многа чисел]), то есть последний array из списка, но весь. У тебя работает, т.к. у тебя a = array([300, 400, многа чисел]). У меня же поверх этого обычный список.
>>697282
Вот тут работает. Как я понял за счет конвертации моего списка в np.array A= np.array(A).
Стать программистом за 300к час
С "local\pidor" например нормально.
и как выявить?
Он так же будет думать, когда я буду перебирать пару тысяч имен вида domain\name в списке?
За базаром следи.
Это работает для значений, которые ты определяешь коде.
Если оно получено другим путем, то похуй.
всем привет, хочу встроить один свой код на питоне в бота в телеге, поставил telebot, но у меня тут проблема в том, что в библиотеке Telebot, как в принципе и в api телеграма нет ни input, ни его нормальных аналогов, поэтому я просто ебанул нахуй вот так вот как на пикриле, присваивая переменной текст сообщения. И вот проблема в том, что после того как бот выводит сообщение, то сразу начинает выполнять код дальше, в итоге на практике это выглядит так:
я пишу ему сообщение чтобы запустить, следом он пишет мне текст с вопросом на который нужно ответить цифрой, и тут же начинает прогонять код, не дожидаясь ответа. Берёт суёт в переменную моё сообщение которое я ему написал в начале, затем суёт его в integer и жидко пукнув выдаёт ошибку что не может преобразовать строку в целое число, по понятным причинам
Так вот вопрос: как мне сделать паузу в telebot чтобы как в стандартном инпут код продолжал работу после того как я напишу следующее сообщение?
Я имел в виду что аналогичное numpy.inf. Какой-нибудь numpy.zero+. Модуль не важен, просто как аналогия.
Нет. Ты сам подумай. inf имеет конкретное представление в процессорах, особое значение, "бесконечно малое" не имеет. Всегда у тебя конкретное число.
string ="some random text"
new_string = string.split()
for word in new_string:
____for letter in word:
________if ...
________elif ...
________else ...
Как сделать чтобы цикл for word in new_string прекращался если в цикле for letter in word выполнялось бы хотя бы одно из условий? Т.е. если letter в любом слове равна r то выходило бы из цикла целиком и не проверяло остальные слова.
Если достаточно да или нет, то можно через any.
Если нужно будет достать конкретное значение, то придется как-то выкручиваться, нет брейков для внешних циклов.
>нет брейков для внешних циклов.
Я уже догадался. Брейк прерывает проверку буквы в слове, но не проверку остальных слов.
>Если достаточно да или нет, то можно через any.
не очень понял. Мне надо сделать так что если в слове одна из букв соответствует условию, то выходило бы из цикла целиком.
Ну вообще для этого можно обойтись одной итерацией, а не смотреть каждую букву.
if letter in word:
___break
Способ с any:
res = any(letter for word in new_string if letter in word)
а если примерно так:
string ="some random text"
new_string = string.split()
for word in new_string:
____for letter in word:
________if ...:
___________if найдена нужная буква:
__________________break
________elif ...
________else ...
___break
прервётся внутренний цикл и после его окончания прервётся и внешний
Внешний в любом случае прервется, норкоман.
а если вместо i надо сверится со списком символов? Если написать if list in word пишет что левый операнд не может быть списком.
Интересует соотношение зп, времени затраченного на вкатывание и необходимые начальные+дополнительные навыки.
Начинаю только работать на питоне, хочу заебашить силениум.
Вылезает вот такой шматок говна (пикрил)
Я понимаю что силениум находится не в деректории питона, но дальше наши полномочия все.
Аноны, объясните в чем проблема, очень хочу вкатиться
Что здесь? queue.Queue в которую кладутся задачи, а логгер их вытягивает раз в N мс?
переменной вообще нет
import selenium - все что написано
run и я обосрался
на macOS High Sierra пишу, в сублиме
У тебя питон 2.7? Как ставил селениум? Возможно последняя версия не совместима с питоном 2.7
ставил слениум через pip/терминал
Ну ошибка с вторым, разбирайся.
разобрался, cпасибо огромное
Молодой человек, вы охуели. Вам бесплатно препод разжевывает материалы платных курсов и дает актуальные знания.
Django, на фласке нет работы
Ничего, сейчас заплатит за то, чтобы за него лабу сделали, через N лет будет платить за курсы, чтобы в ИТ вкатиться.
Странный вопрос, начать мог бы сам с поиска по вакансиям ХХ.
Такой альтернативы сейчас нет, сейчас альтернатива Django vs Aiohttp.
Aiohttp примерно как flask, только асинхронный.
Django большой тяжёлый энтерпрайз-фреймворк, с официальной документацией на 2000 страниц. Имеет самостоятельную ценность.
Aiohttp и устаревшие синхронные аналоги легковесный, подразумевает, что очень многое будет прикручено со стороны. Самостоятельной ценности поэтому почти не имеет. Прежде чем в него лезть, надо разобраться с asyncio.
Ниша Джанго - большие сайты CRUD-направленности, ниша aiohttp - сетевые сервисы, где в том числе используется веб-взаимодействие, но лишь как часть.
Посмотрел ХХ, ни на aiohttp, ни на flask практически нет чистых вакансий, в основном их только через запятую перечисляют, что неплохо бы. Пара штук только, где aiohttp основное, но не единственное, что надо.
Для Django/Django Rest есть и чистые вакансии.
Как aiohttp кстати соотносится с django (который де-факто синхронный даже в 3.0)? Есть примеры проектов, написанных на плотной связке этих двух?
>>697825
Я сделал вот так:
for word in new_string:
____if any(letter in russian_letters for letter in word):
____print(f"-----> russian_letters detected!")
____break
russian_letters это список из русских букв. Оно работает, но иногда пропускает строки в которых есть русские буквы. Почему так? Я хуй знает как при таком условии можно пропустить строку хоть с 1 русской буквой.
>for word in new_string:
>____if any(letter in russian_letters for letter in word):
>________print(f"-----> russian_letters detected!")
>________break
Быстрофикс
Примерно никак, кусок асинхронщины добавили в 3 версии, но основные операции все еще синхронны, хотя можно на свой страх и риск убрать некоторые ограничители. А так жди 4 версии еще года полтора, в ней уже допилят асинхронность на базовом уровне.
епта позвони и спроси, мы откуда ебем что за вакансия?
может у них часть сервисов круды+админка и они на джанге, а часть хитрые запросы в базу
может была джанга, а сейчас ебашат на аиохттп
>>698770
То есть если я хочу периодически отсылать асинхронные запросы на сторонние ресурс, то с Джангой этого не сделать? В общем ситуация обстоит так: есть набор url (объявленный в settings либо в utils), каждые 5-10 минут необходимо совершать на них запрос, идеальным будет асинхронный вариант чтобы не ждать их последовательно, но... выходит что запихать asyncio + aiohttp внутрь Джанги не выйдет? Слыхал про Celery, вроде он так может (скоро собираюсь читать мануал) - это поможет?
"Запихать внутрь" не выйдет - поток, в котором исполняется код Django, не займется другими вещами, если ты создашь в нем цикл asyncio - он будет крутить этот цикл, пока в нем не закончатся задачи. То есть в идеале можно сократить время ожидания с 5-10 последовательных вызовов до одного самого медленного.
Проверь - может этого будет достаточно. В ином случае, Celery поможет.
А еще это может не быть частью приложения. Запросы может передавать и просто скрипт по расписанию, а результат складыать в ту же БД, которой пользуется твой сайт.
Хотя... Celery фактически сделает то же самое.
Нет. Изучай ещё.
Сап, в каких программах или при помощи каких библиотек можно создать красивый, ну или хотя бы не всратый дизайн?
Вы видите копию треда, сохраненную 27 сентября 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.