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'
题主的代码有点小问题啊!
题主粗心了吧!
这样好像可以正常运行,不知道是不是这样。
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
你的send和receive两个方法是带形参的,那么需要传入呀
send要两个参数,你为什么就传入一个?
你如果执行的是self.send(),那么self本身会传入第一个参数里
可是你是利用多进程执行的函数,并没有使用实例.方法的方式调用,那你要在括号里把实例作为参数传入呀
如果你确定函数里其实不需要实例,那你需要把函数定义为静态方法