Но ситуация усложняется, если на них есть ссылки в других местах, особенно если имеют место циклические ссылки.В gc реализован механизм поиска циклических ссылок.
item = a->ob_item;
/* recycle the items that we are about to remove */
s = norig * sizeof(PyObject *);
/* If norig == 0, item might be NULL, in which case we may not memcpy from it. */
if (s) {
if (s > sizeof(recycle_on_stack)) {
recycle = (PyObject **)PyMem_Malloc(s);
if (recycle == NULL) {
PyErr_NoMemory();
goto Error;
}
}
memcpy(recycle, &item[ilow], s);
}
if (d < 0) { /* Delete -d items */
Py_ssize_t tail;
tail = (Py_SIZE(a) - ihigh) * sizeof(PyObject *);
// TODO: these memmove/memcpy calls are not safe for shared lists in
// GIL_DISABLED builds. (See issue #129069)
memmove(&item[ihigh+d], &item[ihigh], tail);
if (list_resize(a, Py_SIZE(a) + d) < 0) {
memmove(&item[ihigh], &item[ihigh+d], tail);
memcpy(&item[ilow], recycle, s);
goto Error;
}
item = a->ob_item;
}
else if (d > 0) { /* Insert d items */
...
}
for (k = 0; k < n; k++, ilow++) {
PyObject *w = vitem[k];
FT_ATOMIC_STORE_PTR_RELEASE(item[ilow], Py_XNewRef(w));
}
for (k = norig - 1; k >= 0; --k)
Py_XDECREF(recycle[k]);
result = 0;
Error:
if (recycle != recycle_on_stack)
PyMem_Free(recycle);
Py_XDECREF(v_as_SF);
return result;
Чтобы настроить ноут (именно ноут, а не десктоп из ноута) на линуксе так, чтобы он работал хотя бы примерно так же, как работает на Винде10/11 из коробки - нужно быть хорошим спецом,ThinkPad'ы хорошо работают с линухом без напильника и влезают в ценник. Не смотря на какие-то отзывы на реддите. Тут уж скорее дело в невидиевских драйверах, но они будут работать херово на любом железе.
А могу ли я уместить фронт и бэк на одном хостинге?Можете. Можете даже в одном сервисе их уместить, для этого есть паттерн Backend-for-Frontend. Я предлагаю разделение исключительно потому, что работоспособность этого функционала может в случайный момент отвалиться (см сообщение выше) и будет глупо если из-за этого отвалится весь фронтенд.
Спросил, т.к. на 4ПДА последние несколько месяцев любители модов приложения активно страдают.Это бесполезно спрашивать, слишком много неизвестных: кейсы у всех чем-то отличаются, алгоритмы ВА могут меняться или даже быть не детерминированными.
А какое различие у функций вообще, если в одной тип параметра &Box и в него мы передаем b, который имеет тип Box от параметра просто &i32?
Box<T>
реализует трейт Deref, где Target = T. Это означает, что при использовании указателя он может неявно приводиться к типу T. По тому же принципу, например функции с параметром &str, могут принимать String.И если надо просто адрес проверить, то есть вывести на экран, то лучше использовать "{:p}" для этого? И не мучиться с системой типов?Это описано в std::fmt. Если нужно только вывести, логичнее использовать для этого готовые параметры форматирования.
2. А в чем смысл переписывать полностью последовательный код на асинк?
Начните с того, что добавьте проверку статуса для response, потому что на месте сервиса, который вы ддосите я бы возвращал вам 429.
Далее замените принты на логи, добавьте в логах отображение времени, если его нет и посмотрите пошагово что происходит. Если не разберетесь возвращайтесь с полным логом всех операций.