timo-71

Рейтинг
63
Регистрация
19.09.2018
nash300 #:
а винда спросит что за python
C виндой не друг, но гугл говорит, что можно инфу найти https://tyapk.ru/blog/post/python-virtual-environment-windows
Sly32 #:
Т ут нет темы для спора) 

А это не спор, но затейливое подтверждение теории об умирающих языках. Автор паскаля позиционировал как аналог си, а по питону никто так вопрос не ставит.

Sly32 #:
пример асинхронного кода в фастапи

Там нет особой разницы с аиохттп. На мой взгляд, надо избегать ситуации когда один асинк запрос ждет результат другого. AsyncIO где IO это ввод/вывод, во там и польза от него. 

Кстати, забавный пример: Есть файл со списком запросов на создание таблиц, индексов и прочих. Все по порядку, сначала таблица, потом запчасти для нее. До этого psycord, а тут asyncpg под рукой оказался. Стандартно

        async with self.pool.acquire() as conn:
            stmt = await conn.prepare(sql)
            async with conn.transaction():
                if len(data) > 0 and isinstance(data[0], (list, tuple)):
                    for args in data:
                        async for row in stmt.cursor(*args):
                            up_result(row)
....

Уууппс. Что то типа ОШИБКА:  отношение "......" не существует. Смотрю в файл, все норм. Потом допер - асинхронка, создание индекса запустилось раньше чем создана его таблица. Хотя в файле все по порядку...

По моему, очень наглядный пример. 


Скрин больше как пример того, что с одной стороны все просто, но есть детали..

request.state.tpl_file файл шаблона, типа того:

<!doctype html>
<html lang="{{ content.lang }}" class="no-js">
<head>
  <title>{{ content.title }}</title>
  
  <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
  <meta charset="utf-8">        
        <meta name="description" content="{{ content.description }}">
    
  {% block head %}{% endblock %}
  
  <style>
    {% block root_css %}{% endblock %}
    {% include 'sys/dist/css/css.css' %}
    {% block custom_css %}{% endblock %}
  
</style>
  {{ meta.header_links }}    
  {{ meta.head_meta }}
  {% block head_ext %}{% endblock %}
</head>
<body>
  <header>{% block header %}{% endblock %}</header>
  {% block slider %}{% endblock %}
  <main>
    {{ content.breadcrumb }}        
    {% block attention %}{% endblock %}        
    {% block article %}{% endblock %}
    {% block hits_main %}{% endblock %}
    {% block aside %}{% endblock %}
    {% block related %}{% endblock %}
  </main>
  {% block hits_bottom %}{% endblock %}
  <footer>{% block footer %}{% endblock %}</footer>    
  {% block sys_elements %}{% endblock %}
  <script>
    const baseHost = "{{content.scheme}}://{{ content.base_host }}", cdnHost = "//{{ content.cdn_host }}",
    subDomain = '{{ content.sub }}', realURL = '{{ content.url }}', app = { is_ready: null },
    siteId = "{{ site_id }}", pageId = "{{ content.page_id }}";
    {{ content.start_js_code }}
    {% include 'sys/dist/index.js' %}
    {% block custom_js %}{% endblock %}
  
</script>
</body>
</html>

Тут писали о сложности запуска сайта на питоне, но нет:

# запуск, 
$ gunicorn main:app --workers 4 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:8090

# или типа того
$ ln -s /home/py39a/amtl/amtl_app.service /etc/systemd/system/amtl_app.service
$ systemctl start amtl_app
$ systemctl enable amtl_app

# amtl_app.service
[Unit]
Description=Gunicorn Daemon for FastAPI Application
After=network.target

[Service]
User=www
Group=www
WorkingDirectory=/home/py39a/amtl
ExecStart=/home/py39a/bin/gunicorn -c guniconf.py main:app
Restart=on-failure

[Install]
WantedBy=multi-user.target

#NGINX
upstream latest_app {
    server 0.0.0.0:8090 fail_timeout=0;
}

По мне, так проще некуда)




Каширин #:
Так же могу сказать, что на любом языке можно сделать все, что можно сделать на другом.

Когда то, давно. Лет 30 назад. Попал я на курсы по паскалю. Там препод часто фразу повторял, что, по словам разработчиков,  на  паскале можно сделать все то, что можно на си. И продолжал - "Правда, компилятор паскаля сделан на си"

tp 5, 6  нет нигде 😀 С одной стороны теория про умирающие языки верна, но..

Каширин #:
Если на другом языке что-то сделать проще, или уже сделано

Мы в рамках  темы "Сопоставим ли PHP с Python по возможностям?"

Каков ответ?  Я думаю, скорее нет, чем да. Чаще сделать питоном проще, да и сделано там больше. Я долго переходил с пыха, но pymorphy2 (очень надо) + aiohttp. Правда, сейчас fastapi вместо aiohttp.

Это, к тому, что уже сделано кем то. Очевидно, что качественного опенсорса на питоне существенно больше количественно. С пыхом, костылями майстем а тут все под рукой.


Каширин #:
можно использовать несколько языков в одном проекте, как это часто и бывает. 

Это, да.

$__URL = 'http://4.lcl/1c?';

$steps = [
    'type=catalog&mode=checkauth',
    'type=catalog&mode=init',

    #'type=catalog&mode=file&filename=ajax.php',
    #'type=catalog&mode=file&filename=import_files/d9/d9ry559.jpg',

    #'type=catalog&mode=file&filename=1/offers.xml',
    #'type=catalog&mode=file&filename=1/import.xml',
    
    #'type=catalog&mode=file&filename=1cbitrix.zip',
    #'type=catalog&mode=file&filename=import.zip',
    'type=catalog&mode=file&filename=v8_3a67_1d12.zip',

    'type=catalog&mode=import&filename=import.xml',
    'type=catalog&mode=import&filename=offers.xml',

Эмулятор обмена с 1с. До сих пор на пыхе. Лет 10 уже.

Sly32 #:
Print(„-„ * 80)

Для начала сломается (Print != print, кавычки), потом, после исправления, 80 раз напечатает "-".

Aisamiery #:
, но у меня с виду простые запросы, даже с индексами на базе всего в 200к документов в коллекции работает по 0.3-0.5 секунд

Странно.


from asyncio import run
from motor.motor_asyncio import AsyncIOMotorClient
from time import time


async def m(mongodsn):

dbname=mongodsn.split('/')[-1]
client=AsyncIOMotorClient(mongodsn)
db=client[dbname]

server = await client.server_info()
print('server version', server['version'])

'''
await db.drop_collection("tc")

t0 = time()
result = await db.tc.insert_many(
[{'_id': f"id{i}",
'a': i,
'b': {'c': f'aaa{i}'}} for i in range(2000000)])

print(f'inserted {len(result.inserted_ids)} docs, time {(time()-t0):.4f} s')

await db.tc.create_index("a")
await db.tc.create_index("b.c")
'''

print('Index info:', await db.tc.index_information())

t0 = time()
cnt = await db.tc.count_documents({})
print(f'\nCount all docs: {cnt}, timing: {(time()-t0):.4f} s')

f = {'a': {'$gt': 1990000}}
t0 = time()
cnt = await db.tc.count_documents(f)
print(f'\nCount docs by filter ({f}): {cnt}, timing: {(time()-t0):.4f} s')

t0 = time()
cursor = db.tc.find(f)
cursor.sort('a', 1).skip(2).limit(3)
res = []
async for doc in cursor:
res.append(doc)

print(f'\nfind by filter ({f}) timing: {(time()-t0):.4f} s')
print(res)

f = {'b.c': "aaa1999999"}
t0 = time()
doc = await db.tc.find_one(f)
print(f'\nfind_one by filter ({f}) timing: {(time()-t0):.4f} s')
print(doc)

t0 = time()
f = {"b.c": {"$regex": f"^aaa17878"}}
cursor = db.tc.find(f).limit(3)
res = []
async for doc in cursor:
res.append(doc)

print('\nRes:', res, sep="\n")
print(f'find_one by filter ({f}) ({len(res)}) timing: {(time()-t0):.4f} s')

if __name__ == "__main__":
import os

run(m(os.getenv('AMTL_MONGODSN')))

10 минут на опровержение. Фуллтекст  не стал делать, в 10 минутный лимит не влезть. 2-й запуск на скрине с закоменчеными строками заливки и создания индексов.  Полсекунды только  count_documents, всех 2 млн. Остальное вполне приемлемо.

Кстати,

(py39a) [www@localhost ~]$ wrk -c 500 https://accessories.ford.com/
Running 10s test @ https://accessories.ford.com
  2 threads and 500 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   269.66ms  232.65ms   2.00s    89.79%
    Req/Sec     0.91k   168.08     1.32k    77.27%

18028 requests in 10.02s, 104.30MB read
  Socket errors: connect 0, read 0, write 0, timeout 86
  Non-2xx or 3xx responses: 
18028
Requests/sec:   1800.05
Transfer/sec:     10.41MB

vs

(py39a) [www@localhost ~]$ wrk -c 500 -H "user-agent: Mozila qqqq"  https://accessories.ford.com/
Running 10s test @ https://accessories.ford.com/
  2 threads and 500 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.39s   349.45ms   1.98s    65.08%
    Req/Sec    24.45     15.20    80.00     69.86%
  382 requests in 10.01s, 103.09MB read
  Socket errors: connect 0, read 0, write 0, timeout 319
Requests/sec:     38.16
Transfer/sec:     10.30MB
Non-2xx or 3xx
С юзер агентом нет.  Без него, сколько запросов, столько и
Non-2xx or 3xx

Грамотно, но мб примерно одинаково отдали. Видимо 404/... по объему сопоставима.

--------------------------------------------

Тихонько поворачиваемся к веб строительству. И начинаем формировать понимание  заказчика про ТЗ/бюджет 

Aisamiery #:
Где то слышал давненько, сейчас выкупили их адобэ и чет нет такой уже инфы на сайте. Но тут тоже список солидный т

Там, скорее всего, какой то раздел сайта/где то на другом домене, но в инфраструктуре валмарта.

Вроде https://accessories.ford.com/ (который первый по вашей ссылке):  Top 10 companies using Magento,  а форд.ком, скорее всего, на чем то другом. Иначе, просто бы написали форд.ком наш.

://accessories,  кстати, предполагает более менее ассортимент и вариабельность его, в отличии от собственно машинок. Выбор магенты, если это она, что то значит.

Sly32 #:
О, и как тебк FastAPI? все хвалят, гооврят круче aiohttp.

Нравится.  На моем хозяйстве  FastAPI чуть лучше тесты по скорости/ресурсам дает, поэтому тихонько перевожу все. А так - идеология то примерно одна и та же, какие то вещи вообще один к одному переезжали, ну пара правок может. Правда, в новых реалиях, не ясны перспективы  хозяйства, но хотя бы FastAPI освоил.

Вначале, как то скептически на pydantic смотрел, а сейчас втянулся в ряды поклонников. При прочих плюсах/минусах к системности, что ли какой приучает.

suffix #:
Вы не видите там сложный функционал означает не то что его нет, а то что он сделан для меня (для управления) а не для посетителей.

Не аргумент.

suffix #:
99% сайтов которыми владеют участники данного форума мой сайт обходит с большим отрывом.

С функционалом  - там не скажу, а уж без оного, там с большим отрывом;)

Aisamiery #:
Количество модулей как правило роли не играет, потому что в том виде как они есть они как правило не подходят, либо это проще и быстрее сделать вообще без модулей.

Категорически согласен

------

По теме: Где то,  есть какая то инфраструктура. Пока, она работает. До тех пор, пока не появится то, что то дает лучший результат. Сейчас, 100%, фреймворки рулят. Уж не знаю, насколько Битрикс фреймворк;). Но, оперировать объектами app, request и response, как правило, очень просто. Все задается предложением, есть адекватное и сайты с хтмл и самописов в массе уехали на ВП. Потом, другие. Хз, что там завтра будет.

-------

Фреймфорк и дорогой разработчик. Чушь. Сегодня, может быть, а может нет. Завтра, с учетом док и простоты точно нет

https://fastapi.tiangolo.com

https://docs.aiohttp.org/en/stable/web.html

в пыхе, сейчас не копенгаген, но с ларавеля и прочих yii2, в свое время, для свои самописов, кучу решений стырил. Так что и там доки и код  любому доступен) 

Lazy Badger #:
бакенд должен быть

Про фронт вообще ни слова не сказал. В обоих параллельных темах только про бек. Правда слегка запутался, тут я за бд, или за хардкор - все на файлах и роутер в 50 строк😁

Lazy Badger #:
не делайте мне так смешно

😀

Lazy Badger #:
и это, на секундочку, законное желание пользователя, а не разработчика
Категорически за.
Всего: 541