Основное правило: вы никогда не должны создавать пул, как описано в вашем посте, потому что (1) вы «вручную» блокируете больше ресурсов, чем необходимо (2) вы путаете код, имитирующий асинхронный код, который на самом деле не является, и (3)Языки, как правило, предоставляют инструменты для параллельного программирования, которые специально предназначены для задач такого типа, и это делает работу для вас гораздо лучше, чем вы могли бы ее реализовать (в большинстве случаев).
Следуя вашим требованиям. Я написал простую программу, которую вы можете проверить. Проверьте здесь для asyncio.wait_for
документации. Найдите здесь также несколько полезных руководств по асинхронности.
Скопируйте код в файл и запустите $ python [filename]
import asyncio
import random
from concurrent.futures._base import TimeoutError
async def safe_get():
result = "I'm currently out of my office."
try:
result = await asyncio.wait_for(get(), 3)
except TimeoutError as e:
print("Responder thought too much about his answer")
return result
async def get(a=1,b=6):
random_time = random.randint(a,b)
await asyncio.sleep(random_time)
return "I'm doing good thanks! Sorry it took me " + str(random_time) + "s to answer."
async def main():
# Toggle comment on the two following lines to see (1) unwanted behaviour and (2) wanted behaviour
# response = await get()
response = await safe_get()
print(response)
if __name__ == "__main__":
asyncio.run(main())