[英]Multiprocessing with Python and Arguements
与我的上一篇文章(以某种方式被标记并关闭)有关,我编写了一些代码来为我的python TCP侦听器的命令处理程序创建线程。 基本上发生的是,我发送了一些数据并将其发送到TCP连接器中。 然后,TCP连接器创建另一个进程,并将通过该进程接收到的数据发送到命令侦听器中的函数。 我不知道发生了什么。 请帮忙!
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
方法调用的结果。 您可能打算做的是将该方法用作tharget,因此应使用:
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()
第一次调用后,此循环将失败,因为您无法重新启动已经启动的进程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.