ソケットを介して「更新されたプレイリスト」コマンドをリッスンするこのコードがあります。このコマンドを受け取ると、データベース内のプレイリストが更新されたことを認識し、データベースに接続して新しいプレイリストをダウンロードし、これらのファイルの再生を開始します。コマンドを取得して Media_Player 関数を呼び出すと、ソケットをリッスンするために戻る前に、プレイリスト内のすべてのビデオが再生されるため、これについて最善の方法を見つけようとしています。
その間、別の 'Updated Playlist' コマンドが送信された場合、このコードはリッスンしないため、このコマンドの送信者はエラーを受け取ります。メディア プレーヤーをノンストップで再生したいのですが、新しい再生リストが追加されたことが通知された場合に備えて、常にリッスンしている必要もあります。
次に、新しいプレイリストが追加された場合、それが認識され、プレイ リスト内のファイルの 1 つが再生を終了すると、新しいプレイリストに切り替えて続行できます。
どうすればいいのかわかりません。すべてを 1 つのプロセスで実行し、再生リスト内のファイルごとに新しいスレッドを生成して、すぐにリスニングに戻ることができると思っていましたが、どうすればよいでしょうか。プレイリスト内の各ファイルの長さが異なるため、スレッドがいつ終了したかがわかると思います。
また、関数 listen_serv() で「return data」という行を参照してください。これは、戻ったために接続を閉じていないことを意味しますか?
# Echo server program
import socket
import time
import Database as DB
def listen_serv():
HOST = '' # Symbolic name meaning all available interfaces
PORT = 50007 # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
while 1:
data = conn.recv(1024)
if not data: break
conn.sendall('OK')
return data
conn.close()
while 1:
val= listen_serv()
if val=='Updated Playlist':
PlayList = DB.get_play_list()
Media_Player(PlayList)#This isnt implemented yet