簡體   English   中英

Python:在列表上異步

[英]Python: async over a list

我正在嘗試編寫我的第一段異步代碼。 我已經簡化了我的用例,並且有兩個腳本——“main”和“s3_accessor”。 主腳本構建了一個值列表,然后我想將其傳遞給“build_inventory”函數。

該列表有數百個值,因此同步處理很慢。


主文件

import s3_accessor # another .py script
import asynchio

async def main():
     some_list [a, b, c, d, e, f, g]
     
     for val in some_list:
          inventory_df = s3_accessor.build_inventory(val)
          s3_accessor.write_df_to_s3('some_key', inventory_df)


if __name__ == "__main__":
     loop = asyncio.get_event_loop()
     loop.run_until_complete(main()) 

s3_accessor.py

async def build_inventory(val):
     ...

問題:

我將如何修改此代碼以使列表上的迭代是異步的?

我嘗試將整個 for 循環部分包裝在await asyncio.wait()中,但這似乎不是正確的方法。

如果,正如我上面所問的,您正在嘗試同時處理所有值,並且可以同時調用 s3_accessor :

async def handle_one_value(val):
    inventory_df = s3_accessor.build_inventory(val)
    s3_accessor.write_df_to_s3('some_key', inventory_df)

async def main():
     some_list = [a, b, c, d, e, f, g]
     wait asyncio.gather(*(handle_one_value(val) for val in some_list))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM