Tôi có rất nhiều vấn đề với hầu hết các câu trả lời được đăng - họ sử dụng các thư viện không dùng nữa với các tính năng hạn chế hoặc cung cấp giải pháp với quá nhiều phép thuật trong việc thực hiện yêu cầu, gây khó khăn cho việc xử lý lỗi. Nếu chúng không thuộc một trong các loại trên, chúng là thư viện của bên thứ 3 hoặc không dùng nữa.
Một số giải pháp hoạt động hoàn toàn trong các yêu cầu http, nhưng các giải pháp không phù hợp với bất kỳ loại yêu cầu nào khác, đó là lố bịch. Một giải pháp tùy biến cao là không cần thiết ở đây.
Chỉ cần sử dụng thư viện tích hợp python asyncio
là đủ để thực hiện các yêu cầu không đồng bộ thuộc bất kỳ loại nào, cũng như cung cấp đủ tính trôi chảy để xử lý lỗi cụ thể và phức tạp.
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))
Cách thức hoạt động rất đơn giản. Bạn đang tạo một loạt các tác vụ bạn muốn xảy ra không đồng bộ, sau đó yêu cầu một vòng lặp để thực thi các tác vụ đó và thoát khi hoàn thành. Không có thư viện bổ sung bị thiếu bảo trì, không thiếu chức năng cần thiết.