Gönderilen cevapların çoğuyla ilgili çok fazla sorunum var - ya sınırlı özelliklerle taşınan kullanımdan kaldırılmış kütüphaneleri kullanıyorlar ya da isteğin yürütülmesinde çok fazla sihir içeren bir çözüm sağlayarak hata işlemeyi zorlaştırıyorlar. Yukarıdaki kategorilerden birine girmezlerse, üçüncü taraf kütüphaneleridir veya kullanımdan kaldırılmıştır.
Çözümlerin bazıları tamamen http isteklerinde işe yarıyor, ancak çözümler diğer her türlü istek için yetersiz kalıyor, ki bu gülünç. Burada son derece özelleştirilmiş bir çözüm gerekli değildir.
Basitçe, python yerleşik kütüphanesini kullanmak, asyncio
herhangi bir türdeki eşzamansız istekleri gerçekleştirmek için yeterlidir, ayrıca karmaşık ve kullanıcıya özgü hata işleme için yeterli akışkanlık sağlar.
import asyncio
loop = asyncio.get_event_loop()
def do_thing(params):
async def get_rpc_info_and_do_chores(id):
# do things
response = perform_grpc_call(id)
do_chores(response)
async def get_httpapi_info_and_do_chores(id):
# do things
response = requests.get(URL)
do_chores(response)
async_tasks = []
for element in list(params.list_of_things):
async_tasks.append(loop.create_task(get_chan_info_and_do_chores(id)))
async_tasks.append(loop.create_task(get_httpapi_info_and_do_chores(ch_id)))
loop.run_until_complete(asyncio.gather(*async_tasks))
Nasıl çalıştığı basit. Eşzamansız olarak gerçekleşmesini istediğiniz bir dizi görev oluşturuyorsunuz ve ardından bir döngüden bu görevleri gerçekleştirmesini ve tamamlandıktan sonra çıkmasını istiyorsunuz. Bakım gerektirmeyen ekstra kütüphane, işlevsellik eksikliği gerekmez.