Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
News: #Ethiopia wheat imports to persist as rising prices, tight supply offset production gains
A new #USDA report projects that Ethiopia will continue importing about 1.4 million metric tons of #wheat despite increased domestic production, citing tight supply and surging prices. The report also notes that domestic wheat prices have risen sharply, reinforcing reliance on imports even as output grows.
Despite the expected growth in wheat production, the report warns that domestic wheat supplies remain tight, forcing millers and traders to increasingly rely on imports.
#Russia remains Ethiopia’s largest wheat supplier, accounting for 68 percent of imports, followed by #Ukraine and #Romania. Together, the three countries supplied 93 percent of Ethiopia’s wheat imports, underscoring the country’s continued reliance on Black Sea markets.
Prime Minister Abiy Ahmed has repeatedly remarked rejecting wheat import as a defining feature of Ethiopia........
Read more: https://addisstandard.com/?p=56330
News: USDA purchases #US wheat to support agricultural development in #Ethiopia and #Kenya
The United States Department of Agriculture (#USDA) has purchased 183,700 metric tons of U.S. hard red winter (HRW) wheat to support agricultural development projects in Ethiopia and Kenya, according to the U.S. Wheat Associates (USW).
The purchase, made in mid-January by the USDA’s Foreign Agricultural Service (FAS), marks the first U.S. wheat procurements under the Food for Progress program for the 2025 fiscal year. The wheat will be delivered in four cargoes—three from #Houston, #Texas, and one from #Kalama, #Washington—destined for the two #East_African countries.
Food for Progress is a U.S. government program that provides agricultural commodities to support food security and development in partner countries. Under the program, donated food commodities are sold locally,....
https://web.facebook.com/AddisstandardEng/posts/pfbid0qv13B87UsJgyuNpxxeB8Be2fj41XGjLZ1aRCDYLc85AGHGZ3hrMK9QRFKRDiQDcal
🚀 USDA Maintains Soybean Production Forecast for 2025/2026
The United States Department of Agriculture (USDA) has maintained its forecast for the 2025/2026 soybean production at 4.262 billion bushels, unchanged from its March estimate. According to Jin10, the USDA also projects the ending stocks for the same period to be 350 million bushels, slightly above the market expectation of 349 million bushels, and consistent with the March forecast. Additionally, the USDA anticipates the soybean yield to remain at 53 bushels per acre, the same as the previous month's projection.
#USDA#Soybean#Agriculture#Production#Forecast #2025 #2026 #Yield#EndingStocks#USAgri