2017-10-27 6 views
1

私は約70リクエストを送信しようとしていますが、非同期で実装する方法が見つからない場合は約3秒かかりますここで私はトンに試した方法timeout error多くのリクエストをPythonで非同期的に送信することは可能ですか?

を取得し、それを実装:

import asyncio 

def send_msg_to_all(sc,request,msg): 
    user_list = sc.api_call(
     "users.list" 
    ) 
members_array = user_list["members"] 

ids_array = [] 
for member in members_array: 
    ids_array.append(member['id']) 
real_users = [] 

for user_id in ids_array: 

    user_channel = sc.api_call(
     "im.open", 
     user=user_id, 
    ) 
    if user_channel['ok'] == True: 
     real_users.append(User(user_id, user_channel['channel']['id'])) 

loop = asyncio.new_event_loop() 
asyncio.set_event_loop(loop) 
loop.run_until_complete(send_msg(sc, real_users, request, msg)) 
loop.close() 
return HttpResponse() 


async def send_msg(sc, real_users, req, msg): 
    for user in real_users:  
     send_ephemeral_msg(sc,user.user_id,user.dm_channel, msg) 


def send_ephemeral_msg(sc, user, channel, text): 
    sc.api_call(
     "chat.postEphemeral", 
     channel=channel, 
     user=user, 
     text=text 
    ) 

をしかし、私はまだ同期方法

すべてのアイデアをみんなでそれをやっているように見えますか?

+0

コードに構文エラーがあり、 'send_msg_to_all'関数宣言の下の行には字下げがありません。まずコードを修正してください。 – szamani20

答えて

0

スラックのAPIのレート制限は1秒あたり1クエリ(QPS)でdocumented hereです。

この機能を使用しても、限界をはるかに上回り、HTTP 429 Too Many Requestsのエラーが発生します。あなたのAPIトークンは、その速度で続行すると取り消し/取り消されることさえあります。

私はあなたが別の方法を見つける必要があると思います。