首页 > 解决方案 > multiprocessing.Pool ==> TypeError:预期的字符串或 Unicode 对象,NoneType 找到

问题描述

这些是一些 Python 脚本,用于通过套接字从客户端节点获取 mac。

multiprocessing.pool用来让它运行得更快,但我得到这个错误:

TypeError: expected string or Unicode object, NoneType found

这是我正在使用的代码:

服务器:

import os
import re
import socket
import sys
import multiprocessing

def get_mac(cli, caddr):
    while True:
        macinfo = cli.recv(1024)
        if macinfo:
            print('get [{}] from {}'.format(macinfo, caddr))
        else:
            print('establish but get nothing from {}'.format(caddr))
            print('TERMINAL CLI-SOCKET')
            cli.close()
        cli.sendall('Done')
        log.info('Send Confirm <Done> To {}'.format(caddr))
        info = macinfo.split(',').strip()
        return info

def gen_config(info):
    print(info)

def start(func):
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    addr = ('mn0', 1995)
    sock.bind(addr)
    sock.listen(5)
    pool = multiprocessing.Pool()
    while True:
        print('waitting for new connect ...')
        cli, caddr = sock.accept()
        print('establish new connect with {}'.format(caddr))
        pool.apply_async(func, args=(cli, caddr,), callback=gen_config)

    pool.close()
    pool.join()

if __name__ == '__main__':
    start(get_mac)

客户:

#!/usr/bin/env python
import socket

def send():
    addr = ('mn0', 1995)
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect(addr)
    print('Establish Connect with {}'.format(addr))
    sock.sendall('{},{}'.format('192.168.85.1', 'da:ad:as:as:as:sa'))
    print('send 192.168.85.1  da:ad:as:as:as:sa')
    data = sock.recv(1024)
    if data == 'Done':
       print('Confirm Send')
    sock.close()

if __name__ == '__main__':
    send()

完整的错误信息:

[root@mn0 svr]# python svr.py
waitting for new connect ...
establish new connect with ('192.168.85.128', 52798)
waitting for new connect ...
Exception in thread Thread-2:
Traceback (most recent call last):
  File "/usr/lib64/python2.7/threading.py", line 812, in __bootstrap_inner
    self.run()
  File "/usr/lib64/python2.7/threading.py", line 765, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/usr/lib64/python2.7/multiprocessing/pool.py", line 342, in _handle_tasks
    put(task)
TypeError: expected string or Unicode object, NoneType found

标签: pythonmultiprocessingpool

解决方案


推荐阅读