2016-08-10 1 views
0

트위터 검색 및 스트림 API를 다중 처리하려고하는데 프로세스를 시작할 수 없습니다. 나는 더 간단한 함수로 시도하고 start() 메소드가 작동한다.다중 처리 스트림 및 검색 API 결과 PickleError : NoneType

이 문제를 해결할 수있는 방법을 알려 주시면 정말 고맙겠습니다.

감사합니다.

Traceback (most recent call last): 
    File "C:\Python27\Code\tweets\Stream.py", line 620, in <module> 
    tweetParser.start() 
    File "C:\Python27\lib\multiprocessing\process.py", line 130, in start 
    self._popen = Popen(self) 
    File "C:\Python27\lib\multiprocessing\forking.py", line 277, in __init__ 
    dump(process_obj, to_child, HIGHEST_PROTOCOL) 
    File "C:\Python27\lib\multiprocessing\forking.py", line 199, in dump 
    ForkingPickler(file, protocol).dump(obj) 
    File "C:\Python27\lib\pickle.py", line 224, in dump 
    self.save(obj) 
    File "C:\Python27\lib\pickle.py", line 331, in save 
    self.save_reduce(obj=obj, *rv) 
    File "C:\Python27\lib\pickle.py", line 425, in save_reduce 
    save(state) 
    File "C:\Python27\lib\pickle.py", line 286, in save 
    f(self, obj) # Call unbound method with explicit self 
    File "C:\Python27\lib\pickle.py", line 655, in save_dict 
    self._batch_setitems(obj.iteritems()) 
    File "C:\Python27\lib\pickle.py", line 687, in _batch_setitems 
    save(v) 
    File "C:\Python27\lib\pickle.py", line 286, in save 
    f(self, obj) # Call unbound method with explicit self 
    File "C:\Python27\lib\pickle.py", line 568, in save_tuple 
    save(element) 
    File "C:\Python27\lib\pickle.py", line 331, in save 
    self.save_reduce(obj=obj, *rv) 
    File "C:\Python27\lib\pickle.py", line 425, in save_reduce 
    save(state) 
    File "C:\Python27\lib\pickle.py", line 286, in save 
    f(self, obj) # Call unbound method with explicit self 
    File "C:\Python27\lib\pickle.py", line 655, in save_dict 
    self._batch_setitems(obj.iteritems()) 
    File "C:\Python27\lib\pickle.py", line 687, in _batch_setitems 
    save(v) 
    File "C:\Python27\lib\pickle.py", line 286, in save 
    f(self, obj) # Call unbound method with explicit self 
    File "C:\Python27\lib\pickle.py", line 655, in save_dict 
    self._batch_setitems(obj.iteritems()) 
    File "C:\Python27\lib\pickle.py", line 686, in _batch_setitems 
    save(k) 
    File "C:\Python27\lib\pickle.py", line 286, in save 
    f(self, obj) # Call unbound method with explicit self 
    File "C:\Python27\lib\pickle.py", line 754, in save_global 
    (obj, module, name)) 
pickle.PicklingError: Can't pickle <type 'NoneType'>: it's not found as __builtin__.NoneType 
[INFO/MainProcess] process shutting down 
[DEBUG/MainProcess] running all "atexit" finalizers with priority >= 0 
[DEBUG/MainProcess] running the remaining "atexit" finalizers 
Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
    File "C:\Python27\lib\multiprocessing\forking.py", line 381, in main 
    self = load(from_parent) 
    File "C:\Python27\lib\pickle.py", line 1384, in load 
    return Unpickler(file).load() 
    File "C:\Python27\lib\pickle.py", line 864, in load 
    dispatch[key](self) 
    File "C:\Python27\lib\pickle.py", line 886, in load_eof 
    raise EOFError 
EOFError 
[INFO/Process-1] process shutting down 
[DEBUG/Process-1] running all "atexit" finalizers with priority >= 0 
[DEBUG/Process-1] running the remaining "atexit" finalizers 

답변

0

당신은 가지고있다 : 여기

queue = Queue() 
    exitEvent = Event() 
    multiprocessing.log_to_stderr(logging.DEBUG) 

    print "-- starting tweetParser! --" 
    tweetParser = Process(target = parseTweets, args = (conn, cursor, queue, exitEvent, config['debug'],)) 
    tweetParser.daemon = True 
    tweetParser.start() 

    print "-- starting twitterStream! --" 
    twitterStream = Process(target = StreamingTwitter, args = (streamAPI, queue, exitEvent, config['keywords'], config['time'], config['debug'],)) 
    twitterStream.daemon = True 
    twitterStream.start() 

    print "-- starting twitterSearch! --" 
    twitterSearch = Process(target = SearchingTwitter, args = (searchAPI, queue, exitEvent, config['keywords'], config['time'], config['debug'],)) 
    twitterSearch.start() 

    tweetParser.join() 

내 오류의 전체 역 추적입니다 : 감사합니다

, 테렌스 여기

프로세스를 시작하는 내 코드의 일부이다 직렬화 문제. multiprocessing으로 None을 피클링 할 수 없습니다. 그러나 multiprocess으로 할 수 있습니다. 더 나은 직렬화를 사용하는 포크입니다.

>>> import multiprocess 
>>> multiprocess.Pool().map(lambda x: x, [None, None, None]) 
[None, None, None] 
>>> 

그게 전부 일 수도 있습니다.

+0

안녕하세요 마이크, 답장을 보내 주셔서 감사합니다. 그러나, 파이썬 2.7에서 패키지 다중 프로세스를 찾을 수 없습니다. 멀티 프로세싱 모듈로 피클 문제를 해결할 방법이 있습니까? – user3863316

+0

@ user3863316 :'multiprocess'는 타사 모듈입니다. 'pip install multiprocess'를 써서 설치해야합니다. 참고로, 표준'다중 처리 (multiprocessing) '에서 해결할 수 있습니다. 사용하는 모든 객체가'cPickle'으로 pickleable인지 확인해야합니다. 이렇게하면 코드를 세밀하게 재구성하고 객체를 등록하는 작업이 수행됩니다 (피클 레지스트리로). 제 3 자 패키지를 설치할 수 없다면, 먼저'multiprocess' 옵션을 시도해보십시오. 나는 패키지 저자이기 때문에 어느 정도 편파적이지만 그럼에도 불구하고 훨씬 쉬운 경로 여야한다. –

+0

안녕 마이클! 나는 핍을 통해 UR 패키지를 다운로드했지만 오류가 : 역 추적 (마지막으로 가장 최근 통화) : 파일 "C : \ Python27 \ 코드 \ test.py", 줄 1 수입 멀티 프로세스 파일에, "C : \ Python27 \ lib \ site-packages \ multiprocess \ __init__.py", 줄 84, import _multiprocess as multipulty ImportError : 모듈 이름이 _multiprocess – user3863316