Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
from fastapi.concurrency import run_in_threadpool
async def execute(data: DataRequest) -> DataResponse:
try:
result = await run_in_threadpool(sync_function, data)
return DataResponse(data=result)
except Exception as e:
return DataResponse(
error=str(e),
success=False,
)
В общем работает нормально. Для всех вызовов под капотом используется общий тредпул, всё работает предсказуемо.
Но потребовалось изменить количество запускаемых в пуле потоков (по умолчанию создается 40 воркеров).
Так как дело происходит с FastAPI, делается это через lifespan используя настройки anyio:
import anyio
@asynccontextmanager
async def lifespan(app: FastAPI):
limiter = anyio.to_thread.current_default_thread_limiter()
limiter.total_tokens = 100
yield
# если вдруг нужно вернуть обратно
limiter.total_tokens = 40
Зачем менять количество воркеров?
- уменьшить, если оперативки мало (один тред занимает ~8мб)
- увеличить чтобы выдержать нагрузку
Если есть предложения получше при тех же вводных - предлагайте😉
#async
International Court of Justice (#ICJ ) has finally had enough of #Israelis and their #genocidal actions against the #Palestinians of Gaza
It has finally decided to do what #SouthAfrica demanded it should have done months ago:
• Demand that the #ZioNazis halt their #genocidal slaughter of innocents in #Gaza
and that
• Israel must ensure access to Gaza for UN genocide investigators
UN rapporteur: Israel will not stop ‘this madness’ until we make it stop
Francesca #Albanese, the #UN’s special #rapporteur on #Palestine on Saturday urged member states to impose sanctions on #Israel along with an arms embargo until it stops “this madness,”
“Let’s be clear. As the #ICJ orders Israel to stop its offensive in #Rafah, #Israel instead intensifies its attacks on it,”
The International Court of Justice (#ICJ) in its latest ruling ordered Israel to immediately halt its military offensive in #Rafah, a city in southern Gaza where more than 1.5 million displaced Palestinians had sought refuge.
“The news I am receiving from the people trapped therein are terrifying,
Be sure: Israel will not stop this madness until WE make it stop,”
Albanese urged all UN member states to impose #sanctions, arms #embargo and suspend diplomatic and political relations with Israel until it ceases its #genocidal assault.
A legal group submitted to the #UN the most thorough legal analysis of Israel's actions concluding it is committing genocide against Palestinians in Gaza.
This is probably the most complete report to date that demonstrates how #Israel's attacks on #Palestinians in #Gaza meet the legal definition of #genocide.
It's a 100-page report, by legal experts at #Boston University School of Law, #Cornell Law School, #Yale Law School, and others.
The report's conclusion:
"Israel has committed the #genocidal acts of #killing, causing serious harm to, and inflicting conditions of life calculated to bring about the physical #destruction of #Palestinians in #Gaza, a protected group that forms a substantial part of the Palestinian people.
These #genocidal acts have been motivated by the requisite genocidal intent, as evidenced in this report by the statements of #Israeli leaders, the character of the State and its forces’ conduct against and relating to Palestinians in Gaza, and the direct nexus between them."