Cara meneruskan parameter ke beberapa tugas asinkron dengan Python
Saat ini saya memiliki beberapa kode yang terlihat seperti ini:
userinput1 = abc.....
userinput2 = abc.....
userinput3 = abc.....
async def task1():
do something with userinput1...
do another thing...
async def task2():
do something with userinput2...
do another thing...
async def task3():
do something with userinput3...
do another thing...
async def main():
await asyncio.wait([task1() , task2(), task3()])
if __name__ == '__main__':
asyncio.get_event_loop().run_until_complete(main())
Seperti yang Anda lihat di atas, saya memiliki 3 fungsi asinkron yang melakukan hal-hal terpisah secara bersamaan. Saya bertanya-tanya apakah ada cara untuk membuat banyak fungsi dengan mudah berdasarkan input pengguna? Pada dasarnya apa yang saya ingin agar dapat dilakukan adalah ini:
userinput1 = abc.....
userinput2 = abc.....
userinput3 = abc.....
userinput4 = abc.....
amount_of_needed_functions = 4
Dan kemudian setelah mendapatkan data itu, itu akan berjalan seperti skrip ini:
async def task1():
do something with userinput1...
do another thing...
async def task2():
do something with userinput2...
do another thing...
async def task3():
do something with userinput3...
do another thing...
async def task4():
do something with userinput4...
do another thing...
async def main():
await asyncio.wait([task1() , task2(), task3(), task4()])
if __name__ == '__main__':
asyncio.get_event_loop().run_until_complete(main())
Jadi cukup banyak itu akan membuat fungsi berdasarkan veriable tertentu (seperti userinput1) dan kemudian melakukan ini beberapa kali yang ditentukan (jumlah_of_needed_functions) dan kemudian menjalankan semua ini secara bersamaan. Maaf ini adalah pertanyaan yang agak membingungkan tetapi saya cukup bingung dari mana harus mulai meneliti ini. Terima kasih!
Jawaban
Berikan masukan pengguna sebagai argumen untuk setiap tugas:
Fungsi Tunggal Untuk Banyak Tugas
import asyncio
async def function(user_input, input_index):
print(f'In {input_index} function: {user_input}')
async def main():
tasks = []
for input_index in range(1, 4):
user_input = input(f"Enter input #{input_index}\n")
tasks.append(asyncio.create_task(function(user_input, input_index)))
await asyncio.gather(*tasks)
if __name__ == '__main__':
asyncio.run(main())
Beberapa Fungsi Untuk Beberapa Tugas
Gunakan kamus untuk memanggil metode yang Anda inginkan untuk setiap masukan.
import asyncio
async def function1(user_input, input_index):
print(f'In {input_index} function1: {user_input}')
async def function2(user_input, input_index):
print(f'In {input_index} function2: {user_input}')
async def function3(user_input, input_index):
print(f'In {input_index} function3: {user_input}')
FUNCTION_DICTIONARY = { 1 : function1, 2 : function2, 3 : function3 }
async def main():
tasks = []
for input_index in range(1, 4):
user_input = input(f"Enter input #{input_index}\n")
tasks.append(asyncio.create_task(FUNCTION_DICTIONARY[input_index](user_input, input_index)))
await asyncio.gather(*tasks)
if __name__ == '__main__':
asyncio.run(main())
Anda dapat mencoba sesuatu seperti ini jika semua fungsi melakukan hal yang sama
inputs = ['a', 'b', 'c']
async def task(input: str):
# Do stuff / await stuff
return input
async def main()
await asyncio.wait(
[task(arg) for arg in inputs]
)