2017-01-18 10 views
0

シナリオ:peonytwitterとdiscordpyを使用してtwitterストリームからdiscordサーバーにライブ更新します。時々、私たちはスポイラーを避けるためにツイートを遅くする必要があります(ツイッターはライブラジオより先です)。グローバルは非同期forループで正しく変更されていません

Iは、実行中のタスク

async def twat(bot,totrack,outputChannel): 
    ctx = pclient.stream.statuses.filter.post(follow=totrack) 
     async with ctx as stream: 
      async for tweet in stream: 
       ... 
       global tweetdelay 
       await async.sleep(tweetdelay) 
       print("tweetdelay is set to {}".format(tweetdelay)) 
       await bot.send_message(outputChannel,embed=em) 

bot.loop.create_task(twat(bot,"123,456",Output1)) 
bot.loop.create_task(twat(bot,"789,1011,1213",Output2)) 

として私は、既に実行中のタスクにtweetdelay変数を変更することになっている二次機能を有する、流れループにツイート用非同期を有しています。

@commands.command(aliases = ["tweetdelay"]) 
async def matchmode(self,delay = "0"): 
    if delay.isdigit() == True: 
     delay = int(delay) 
     global tweetdelay 
     tweetdelay = delay 
     print(tweetdelay) 

matchmode/tweetdelay機能がコマンドを介して配信されると次のツイートが発生したときに、私は、しかし、

を得ます私はまだ得ます

tweetdelayは、だから私は明らかにループの中にグローバル変数を確認する方法を誤って解釈しています0

に設定されています。

私が思った最初の選択肢は、ループを殺し、それに余分なパラメータをtwat(bot、totrack、delay、outputChannel)として与えることによって再起動する方法を考え出すことでしたが、この問題はTwitterの420機能があまりにも頻繁に使用されている場合(例えば遅延を微調整する場合など)、あなたの静かなステータスコードを強化して再接続をブロックします。誰かが私の代わりにやっていなければならないことの正しい方向に微笑んでくれますか?

答えて

0
async def check_delay(): 
    global tweetdelay 
    return tweetdelay 

twat(): 
    ... 
    tweetdelay = await check_delay() 
    await async.sleep(tweetdelay) 
関連する問題