2016-12-14 5 views
1

私はPythonには比較的新しいので、Discordのためのボットを開発しています。私はボットを動かすことができますが、私が入れた新しいコマンドのいくつかに問題があります。タスクは破棄されましたが保留中です! - Python Discord Bot Error

私はurllib.requestsを使ってサイトからjsonを解析し、データを保存する "Member_City_Count"ファイルに保存します。私は、関数が実行を終了し、ボットがシャットダウンした後、しかし、ボットはそれを実行するために呼び出されたときに、私は次のエラーを取得する、それ自身の上で動作する知っている:

(Task was destroyed but it is pending! task: 
Task pending coro=<_run_event()running at C:\Users\dom\AppData\Local\Programs\Python\ 
Python35-32\lib\site_packages\discord\client.py:307>wait_for=Future pending 
cb=[Task._wakeup(), BaseSelectorEventLoop._sock_connect_done(964)()]>) 

一番私を混乱させるは、約1であることですそれを実行する4回の試みは成功するでしょう!

async def on_message(message): 
    if message.content.startswith(!Cities): 
     await client.send_message(message.channel, "Collecting Data ...") 
     Member_City_Count() 
     await client.send_message(message.channel, "Complete") 

問題が明らかに明白であり、まだasyncioで把握しようとしているとお詫び申し上げます。

+0

私は、これはタイミングの問題であると考えているが、それを解決するために私の試みのどれも働いていない理由を私は知りません。 キープアライブスレッドが(長時間実行されているコールバックが原因で)pingが行われないためです。 – JamEnergy

答えて

0

不一致apiは、N秒ごとにサーバーにpingする必要があります(Nは約60です)。

これが起こらない場合は、ある時点で例外が発生します(私は次の不和の呼び出しを信じています)。

ワークフロー内で長時間実行されている機能を使用している場合は、pingが行われず、クライアントの状態が悪化する可能性があります。

Pythonは、CPU集約的なタスクでは本質的に「シングルコア」であることに注意してください。

これはasyncioに関連していますが、disordの具体的な使用パターンと関連しています。

重度のブロック処理を別のプロセスにオフロードできます。そうでなければ、多くの小さな非同期関数に分割します。ここで

は、いくつかの漠然と関連情報です: https://discordpy.readthedocs.io/en/latest/faq.html#what-does-blocking-mean

関連する問題