-
Notifications
You must be signed in to change notification settings - Fork 50
LiveChat・LiveChatAsyncの動作モード
LiveChat/LiveChatAsyncは、バックグラウンドでチャットデータを取得しBuffer(FIFOキュー)に貯めることで、チャットデータの取得タイミングと独立に、データを利用できるようにしています。
動作モードは以下の3つがあります。
get()により、任意のタイミングでBufferにあるチャットデータを取り出すことができます。
from pytchat import LiveChat
chat = LiveChat("G1w62uEMZ74")
while chat.is_alive():
data = chat.get()
for c in data.items:
print(f"{c.datetime} [{c.author.name}]-{c.message} {c.amountString}")
data.tick()
calbackモードでは、一定間隔で自動的にcallbackパラメータに指定された関数を呼び出します。
コンストラクタでcallbackパラメータに呼び出し先の関数名を指定することで、callbackモードが有効になります。
callbackモードが有効になっている状態でget()関数を呼び出すと、IllegalFunctinCall例外が発生します。
from pytchat import LiveChat
import time
#callbackパラメータに呼び出し先の関数名を指定します。
chat = LiveChat("G1w62uEMZ74", callback = func)
while chat.is_alive():
#任意の処理をここに書きます
time.sleep(3)
#自動的に呼び出される関数
#Youtubeチャットデータのinterval(timeoutMsミリ秒)の間隔で定期的に呼ばれます。
def func(chatdata):
for c in chatdata.items:
print(f"{c.datetime} [{c.author.name}]-{c.message} {c.amountString}")
chat.tick()
directモードでは、Bufferを使用せずにcallbackパラメータに指定された関数を呼び出します。
directモードを有効にするには以下の2つの条件を満たす必要があります。
- コンストラクタでdirect_mode = Trueを指定
かつ
- コンストラクタでcallbackパラメータに呼び出し先の関数名を指定
⇒direct_modeが有効になります。
逆に
- directモードが有効になっている状態でget()関数を呼び出した場合
または
- direct_mode = Trueにもかかわらずcallbackパラメータに何も指定しなかった場合
⇒IllegalFunctinCall例外が発生します。
directモードはbufferを使用しない分、理論的に使用メモリが抑えられ動作も軽いはずですが、呼び出し先のcallback内での処理に長時間(10秒以上)かかる場合、チャットデータの取得遅延が生じます。
from pytchat import LiveChat
import time
#callbackパラメータに呼び出し先の関数名を指定します。
#direct_mode = Trueを指定します。
chat = LiveChat("G1w62uEMZ74", callback = func,
direct_mode = True)
while chat.is_alive():
#任意の処理をここに書きます
time.sleep(3)
#自動的に呼び出される関数
#returnまで10秒以上かかる場合、チャットデータの取得遅延が生じます。
def func(chatdata):
for c in chatdata.items:
print(f"{c.datetime} [{c.author.name}]-{c.message} {c.amountString}")
chat.tick()
ユーザーからのget()要求があったとき、Bufferに残っている全てのチャットデータ(chat_componentのリスト)を取り出してChatProcessorに一旦渡します。 その後ChatProcessorから加工後のデータを受け取ってユーザーに返します。
一定間隔でcallback呼び出しが行われる際、Bufferに残っている全てのchat_componentのリストを取り出してChatProcessorに一旦渡します。 その後ChatProcessorから加工後のデータを受け取ってcallback関数の引数に設定し呼び出します。
Bufferを経由せず、チャットデータを取得した後すぐに、ChatProcessorにchat_componentのリストを渡します。 その後ChatProcessorから加工後のデータを受け取ってcallback関数の引数に設定し呼び出します。
モード図解