Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
🎁[New Loot] : Paytm First Application
Sign-up : 50₹ (Use Code)
Per Refer : 10₹
Link : https://firstgames.onelink.me/wElH/a4444f3f
Code Tap To Copy : elnfet068
🤑Instant Withdraw , [#Proof] Added , Don't Miss Loot Fast
❌Over Now Giving bonus only
Pannel station : Female Trick Earn Free Rs. 200 Paytm Cash (#Proof Added)
Link : bit.ly/3h1O7Wt
➠Steps To Get Rs.200 Cashback
•Enter Only Female Name
• Gender Only : Female
•Age : 18+
⚠️Important : Must Verify Gmail Id (Check Your Gmail Box)
Note : Cashback Within 24 Hours , Complete Very Easy Survey & Earn Money
🙊 “On.. went.. on..” – we are learning to distinguish swear words from terms from the crypto world!
Cryptocurrencies are an unusual and challenging market. Over the years, Cryptans have invented many words to describe what is happening around them. And we have compiled a dictionary of the most important of them for you:
➖#Wallets are a key vault for different cryptocurrencies. There is no crypt on the wallet itself, it is located in the blockchain and is assigned to your addresses. Wallets can be "cold" and "hot".
➖#DeFi – decentralized finance. Such crypto projects do not have a specific “manager” or “supervisor”. Interactions between users are managed by smart contracts.
➖#Smart contract - algorithms in the blockchain that control user actions and execute commands and conditions embedded in them.
➖#Proof-of-Work (POW, proof of work) is an algorithm for confirming transactions in the blockchain (achieving consensus) using the computing power of its participants (mining)
➖#Proof-of-Stake (POS, proof of stake) – all transactions in the blockchain are confirmed using cryptocurrency in the wallets of participants
➖#Staking – placement of POS-blockchain tokens in a wallet for a reward. The POS system needs coins to function. A more convenient and effective form is liquid staking.
➖#Gas – payment for transactions on the blockchain. When the activity on the network increases, so does the gas charge.
➖#Fork – updating/changing the blockchain: its technologies and rules
➖#Mixers are platforms that mix tokens of different users, hiding the history of transactions and previous owners.
➖#Bridges (cryptomostes, cross-chain bridges) is a service for transferring crypts from one blockchain to another. Without them, different blockchains and crypto projects cannot communicate with each other.
➖#NFT is a unique digital certificate confirming the ownership of a digital object: anything, but most often a song, a picture, an object from a game.
➖#Stablecoins are coins backed by reliable real assets (dollars, government bonds), and therefore stable in price: 1 to 1 with the dollar.
➖#Memcoins are often coins created “for fun". They are popular among speculators, but some coins “grow up” and try to create full-fledged projects.
➖#Profitability farming is earning money by providing your tokens for trading to other users in liquidity pools on a decentralized crypto exchange.
➖#Airdrop – free distribution of crypto project coins for user activity: try out the project, tell about it on social networks