Can't pickle <type 'generator'>: attribute lookup __builtin__.gen erator failed

meInvent bbird jobmattcon at gmail.com
Fri Oct 14 02:21:05 EDT 2016


Traceback (most recent call last):
  File "C:\Python27\lib\multiprocessing\queues.py", line 262, in _feed
    send(obj)
PicklingError: Can't pickle <type 'generator'>: attribute lookup __builtin__.gen
erator failed


#python pusher.py tcp://*:8080
import sys
import time
import zmq

from multiprocessing import Queue
import threading

import json
from json import dumps, loads, JSONEncoder, JSONDecoder
import pickle
from pycallgraph import PyCallGraph
from pycallgraph.output import GraphvizOutput

class PythonObjectEncoder(JSONEncoder):
    def default(self, obj):
        if isinstance(obj, (list, dict, str, unicode, int, float, bool, type(None))):
            return JSONEncoder.default(self, obj)
        return {'_python_object': pickle.dumps(obj)}

def as_python_object(dct):
    if '_python_object' in dct:
        return pickle.loads(str(dct['_python_object']))
    return dct

context = zmq.Context()
sock = context.socket(zmq.PUSH)
sock.bind(sys.argv[1])

def getcombinations():
    for ii in range(1,2000):
        for jj in range(1,2000):
            for kk in range(1,2000):
                yield [ii,jj,kk]

class StreamArray(list):
    def __iter__(self):
        return getcombinations()

    # according to the comment below
    def __len__(self):
        return 1

def worker():
    while True:
        if q.qsize() < 1000:
            q.put(getcombinations())

q = Queue(maxsize=1000)
t = threading.Thread(target=worker, args = ())
t.daemon = True
t.start()

while True:
    time.sleep(1)
    #sock.send(sys.argv[1] + ':' + time.ctime())
    combobject = getcombinations()
    #sock.send(json.dumps(combobject, cls=PythonObjectEncoder))
    if q.qsize() > 0:
        item = q.get()
        sock.send(json.dumps(item))
        #sock.send(json.dumps(combobject, cls=PythonObjectEncoder))



More information about the Python-list mailing list