对着视频打pycharm代码说缺少参数,这该怎么修正

import multiprocessing
import json

class Work(object):
def init (self,q):
self.q=q

def send(self,message):
    if not isinstance(message,str): 
        message=json.dumps(message)
    self.q.put(message)


def receive(self):
    while 1:
        result=self.get()
        try:
            res=json.loads(result)
        except:
            res=result
        print('recv is %s'%res)

if name=='main':
q=multiprocessing.Queue()
work=Work(q)
send=multiprocessing.Process(target=Work.send,args=({'name':'xiaomu'},))
recv=multiprocessing.Process(target=Work.receive)

send.start()
recv.start()

报错为send和receive缺少参数

Process Process-2:
Traceback (most recent call last):
File "D:\ancode\lib\multiprocessing\process.py", line 315, in _bootstrap
self.run()
File "D:\ancode\lib\multiprocessing\process.py", line 108, in run
self._target(*self._args, **self._kwargs)
TypeError: receive() missing 1 required positional argument: 'self'
Process Process-1:
Traceback (most recent call last):
File "D:\ancode\lib\multiprocessing\process.py", line 315, in _bootstrap
self.run()
File "D:\ancode\lib\multiprocessing\process.py", line 108, in run
self._target(*self._args, **self._kwargs)
TypeError: send() missing 1 required positional argument: 'message'

题主的代码有点小问题啊!

img

题主粗心了吧!
这样好像可以正常运行,不知道是不是这样。

import multiprocessing
import json


class Work(object):
    def __init__(self, q):
        self.q = q

    def send(self, message):
        if not isinstance(message, str):
            message = json.dumps(message)
        self.q.put(message)

    def receive(self):
        while 1:
            result = self.q.get()
            try:
                res = json.loads(result)
            except:
                res = result
            print('recv is %s' % res)


if __name__ == '__main__':
    q = multiprocessing.Queue()
    work = Work(q)
    send = multiprocessing.Process(target=work.send, args=({'name': 'xiaomu'},))
    recv = multiprocessing.Process(target=work.receive)
    send.start()
    recv.start()

是send方法缺少一个参数 message

img

你的send和receive两个方法是带形参的,那么需要传入呀
send要两个参数,你为什么就传入一个?
你如果执行的是self.send(),那么self本身会传入第一个参数里
可是你是利用多进程执行的函数,并没有使用实例.方法的方式调用,那你要在括号里把实例作为参数传入呀
如果你确定函数里其实不需要实例,那你需要把函数定义为静态方法