Python多线程,同时运行两个函数

标签 python multithreading

所以我正在学习套接字编程并编写了一个漂亮的小聊天服务器。我遇到的问题是我的客户端无法同时读写。我不太确定如何设置。

这就是我到目前为止所拥有的,我希望 read() 和 write() 能够同时运行(这并不是同时读取和写入 - 而是能够在输入时接收消息( )挂起等待用户输入。):

import socket 
import threading

class Client(threading.Thread):

    def __init__(self):
        self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.socket.connect(('127.0.0.1', 1234))
        print('Client connected to server')

        self.readThread = threading.Thread.__init__(self)
        self.writeThread = threading.Thread.__init__(self)

    def read(self):
        data = self.socket.recv(1024)
        if data:
            print('Received:', data)

    def write(self):
        message = input()
        self.socket.send(bytes(message, 'utf-8'))


client = Client()

while True:
    #do both

最佳答案

你们真的很接近。尝试这样的事情:

import socket 
import threading

class Client(threading.Thread):

    def __init__(self):
        self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.socket.connect(('127.0.0.1', 1234))
        print('Client connected to server')

        t = threading.Thread(target = self.read)
        t.daemon = True # helpful if you want it to die automatically
        t.start()

        t2 = threading.thread(target = self.write)
        t2.daemon = True
        t2.start()

    def read(self):
        while True:
            data = self.socket.recv(1024)
            if data:
                print('Received:', data)

    def write(self):
        while True:
            message = input()
            self.socket.send(bytes(message, 'utf-8'))


client = Client()

值得指出的是,如果您通过这种方式从单个终端读取和写入,您的提示可能会有点失控。我想虽然您是从打印语句开始,但最终会将数据收集到应用程序中的其他容器中。

关于Python多线程,同时运行两个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11697855/

相关文章:

python - 为什么python FOR循环没有控制结构?

当 rootfs 为只读且/tmp 为 noexec 时,Python ctypes 段错误

Python:如何一次浏览文件中的多行?

Python - 更好的循环解决方案 - 出现错误后重新运行并在 3 次尝试后忽略该错误

python - 无法在 PyCharm 中设置 PYTHONPATH

java - 同步方法在单线程应用程序中是否更慢?

c - 指示handler(定时器)调用时是哪个线程?

SQL Server - key 更新死锁

multithreading - 在ZeroMQ中从多个线程到zmq_poll()一个REP套接字+ send()安全吗?

python - 接口(interface)错误: Error binding parameter 0 - probably unsupported type when runing my django script