繁体   English   中英

使用Python和参数进行多重处理

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM