首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将列表元素作为python中线程的参数传递

如何将列表元素作为python中线程的参数传递
EN

Stack Overflow用户
提问于 2022-06-25 22:47:42
回答 1查看 73关注 0票数 0

我目前正在编写一个服务器,该服务器接受多个客户端,为每个客户端创建一个线程,并通过相同的函数handle_client传递它们。我正在创建连接到服务器并将其存储在clients中的每个客户端的列表。我想通过一个不同的函数块传递每个客户端,我不知道如何将列表中的元素作为线程的参数传递。例如,在我的例子中,两个客户机是机器人Iconet,我想为每个客户端创建一个不同的handle_client函数,然后我希望通过为其设计的handle_client函数传递客户机机器人,并通过为其设计的不同的handle_client传递客户机IconetE 211。这是服务器端的代码。

代码语言:javascript
复制
import threading 
import socket 

PORT = 1026
SERVER = socket.gethostbyname(socket.gethostname())
ADDR = (SERVER,PORT)
FORMAT = "utf-8"
HEADER = 1024
DISCONNECT_MESSAGE = "END_CYCLE"
VITA_R = 'Robot: yes'
VITA_I = 'Iconet: yes'
vita_robot = False
vita_iconet = False


server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(ADDR)
clients = []
aliases = []
alias_dictionary_iter = zip(aliases,clients)
alias_dictionary = dict(alias_dictionary_iter)

def broadcast(values_iconet):
    for client in clients:
        client.send(values_iconet)
        

def handle_client(client,addr):
    print(f"[NEW CONNECTION] {addr} connected.")
    connected = True
    while connected:
        for client in clients:
         if client == clients[0]:
            robot_message = 'VITA_R'
            client.send(robot_message.encode(FORMAT))
            robot_response = client.recv(2048).decode(FORMAT)
            if robot_response == VITA_R:
                print(robot_response)
                print (type(robot_response))
                print("VITA received from robot")
                vita_robot == True
                    
            else:
                print("VITA not received from robot")
                vita_robot == False
                   
         else:
            iconet_message = 'VITA_I'
            client.send(iconet_message.encode(FORMAT))
            iconet_response = client.recv(2048).decode(FORMAT)
            if iconet_response == VITA_I:
                print(iconet_response)
                print (type(iconet_response))
                print("VITA received from iconet")
                vita_iconet == True
                    
            else:
                print("VITA not received from iconet")
                vita_iconet == False
                continue

            client.send('LOCA'.encode(FORMAT))
            values_iconet = client.recv(HEADER)
            print(values_iconet)
            broadcast(values_iconet)
            continue


def start():
    server.listen()
    print(f"[LISTENING] Server is listening on {SERVER}")
    while True:
        client, addr = server.accept()
        print(f"[NEW CONNECTION] {addr} connected.")
        client.send('NAME?'.encode(FORMAT))
        alias = client.recv(1024)
        aliases.append(alias)
        clients.append(client)
        print(f'The clients is {alias}'.encode(FORMAT))
        thread = threading.Thread(target= handle_client, args=(client, addr))
        thread.start()



print ('[STARTING] server is starting')
start()
EN

回答 1

Stack Overflow用户

发布于 2022-06-25 23:58:32

为此创建一个字典。

functions_dict ={“机器人”:handle_robot,"Iconet":handle_client}

Threading.Thread=target= functions_dictclient,args=(client,addr)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72757816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档