使用Python和参数进行多处理
关于我上一篇文章(不知怎么被划掉并关闭了), 我编写了一些代码来为python TCP侦听器的命令处理程序创建线程。基本上发生的是,我发送一些数据,然后它进入TCP连接器。然后,TCP连接器创建另一个进程,并将通过该进程接收到的数据发送到命令侦听器中的函数。我不知道发生了什么事。请帮忙使用Python和参数进行多处理,python,multithreading,networking,tcp,multiprocessing,Python,Multithreading,Networking,Tcp,Multiprocessing,关于我上一篇文章(不知怎么被划掉并关闭了), 我编写了一些代码来为python TCP侦听器的命令处理程序创建线程。基本上发生的是,我发送一些数据,然后它进入TCP连接器。然后,TCP连接器创建另一个进程,并将通过该进程接收到的数据发送到命令侦听器中的函数。我不知道发生了什么事。请帮忙 import socket import sys import errno from multiprocessing import Process, Queue
import socket
import sys
import errno
from multiprocessing import Process, Queue # @UnresolvedImport
import CommandHandler
class tcpconnection:
def tcp(self):
data = ''
q = Queue()
p = Process(target=CommandHandler.CommandHandler.commands(), args=(self, data))
#
HOST = '' # Symbolic name meaning all available interfaces
PORT = 9999 # 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 True:
data = conn.recv(1024)
p.start()
p.join()
if not data: break
conn.send(data)
conn.close()
他说:
p = Process(target=CommandHandler.CommandHandler.commands(), args=(self, data))
TypeError: unbound method commands() must be called with CommandHandler instance as first argument (got nothing instead)
target=CommandHandler.CommandHandler.commands()
将target
参数设置为调用commands
方法的结果。您可能打算将该方法用作目标,因此您应该使用:
p = Process(target=CommandHandler.CommandHandler.commands, args=(self, data))
该错误还告诉您,您正试图对类调用未绑定的方法,但您需要一个对象来调用它,可能是:
p = Process(target=CommandHandler.CommandHandler().commands, args=(self, data))
但这不是你唯一的问题:
while True:
data = conn.recv(1024)
p.start()
p.join()
第一次调用后,此循环将失败,因为您无法重新启动已启动的流程。但如何创建新流程或关闭旧流程?您每次都需要创建一个新流程实例。是否确实要为每个接收到的数据包启动一个新进程?通常,对于每个接受的连接,您都会这样做……mata,我如何将字符串传输到另一个进程?使用一个进程?通常,您会使用队列或其他ipc机制在进程之间交换数据(检查),或。。。