【问题标题】:Identify Thread in Python在 Python 中识别线程
【发布时间】:2016-08-12 07:34:25
【问题描述】:

我有一个 python Socket 服务器正在运行,还有一个 socket 客户端。

现在,例如说有 3 个客户端连接到同一台服务器。请在下面找到服务器的代码。

#!/usr/bin/python           # This is server.py file

import socket               # Import socket module
import threading

serversocket = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 1234                # Reserve a port for your service.
serversocket.bind((host, port))        # Bind to the port
serversocket.listen(5)
print("Bound the port ",port,"on Machine : ",host,", and ready to accept connections.\n")

def clientThread(connection):
    while True:
        data=connection.recv(1024)
        if not data:
            break
        connection.send("Thanks")

    connection.close()

def sendMessage(connection, message):
    connection.send(message)

while 1:
    connection, address = serversocket.accept()
    start_new_thread(clientthread, (connection,))

serversocket.close();

现在,我需要为特定的客户端调用 sendMessage,比如说从客户端 A、B 和 C 中发送给 B。在这种情况下,我如何识别线程并调用该函数?

【问题讨论】:

标签: python multithreading sockets server client-server


【解决方案1】:

您可以使用队列和每个连接的多个线程来解决这个问题。

基本大纲:

  1. 每个客户端连接产生两个线程 - 一个用于监视客户端输入,另一个用于监视队列。放置在队列中的项目将被发送到客户端。每个客户端连接都有自己的输出队列。

  2. 您还需要一个全局字典来将客户端名称映射到其输出队列。

  3. 要向特定客户端发送消息,请找到客户端的输出队列并将消息添加到其中。

  4. 您还需要一种方法来关闭客户端的输出线程。一种常见的方法是在队列上使用 sentinel 值(如None)来通知输出线程退出其处理循环。当客户端的输入线程检测到 EOF 时,它可以将标记值放在客户端的输出队列中,最终输出线程将自行关闭。

【讨论】:

    猜你喜欢
    • 2021-10-09
    • 1970-01-01
    • 2013-09-05
    • 2017-03-16
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    相关资源
    最近更新 更多