【问题标题】:Tweepy script affecting MongoDB service shutting down影响 MongoDB 服务关闭的 Tweepy 脚本
【发布时间】:2016-09-23 16:48:29
【问题描述】:

我有以下 Python 脚本,它使用 Tweepy 获取推文并使用 PyMongo 将它们存储到 MongoDB 中。发生的情况是,每当我运行此脚本时,我的 MongoDB 实例就会关闭,并且脚本会因错误而停止。我不知道为什么会发生这种情况,因为即使脚本正在终止或 Tweepy 遇到错误,它也不应该影响 MongoDB 的运行状态。这条线被识别为第一个触发点:stream.filter(locations=[-119.970703, 48.994636, -109.951172, 59.955010])

脚本

import tweepy, sys, json, traceback
from bson.json_util import loads as json_to_bson
from hashlib import sha1
from datetime import datetime
from pymongo import MongoClient
from time import sleep, strptime, mktime

client = MongoClient()
mode = None

class Stream(tweepy.StreamListener):
    def on_status(self, data):
        save(data)

    def on_error(self, code):
        pause()

def now():
    return str(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))

def pause():
    sys.stdout.flush()
    sleep((60*15)+5)

def save(data):
    bson = json_to_bson(json.dumps(data._json))
    tweet_date = strptime(bson['created_at'], "%a %b %d %H:%M:%S +0000 %Y")
    tweet_date = str(datetime.fromtimestamp(mktime(tweet_date)))

    bson['created_at'] = tweet_date
    bson['text_hash'] = sha1(bson['text'].encode('punycode')).hexdigest()
    bson['collected_at'] = now()
    bson['collection_type'] = mode

    if client.grebe.tweets.find_one({'text_hash': bson['text_hash']}) == None:
        client.grebe.tweets.insert_one(bson)

def api():
    CONSUMER_KEY = 'key'
    CONSUMER_SECRET = 'secret'
    ACCESS_TOKEN_KEY = 'tokenkey'
    ACCESS_TOKEN_SECRET = 'tokensecret'

    auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
    auth.set_access_token(ACCESS_TOKEN_KEY, ACCESS_TOKEN_SECRET)
    return tweepy.API(auth)

def main():
    mystream = Stream()
    stream = tweepy.Stream(api().auth, mystream)
    stream.filter(locations=[-119.970703, 48.994636, -109.951172, 59.955010])

main()

错误

File "/usr/local/lib/python2.7/dist-packages/tweepy/streaming.py", line 445, in filter 
    self._start(async)

File "/usr/local/lib/python2.7/dist-packages/tweepy/streaming.py", line 361, in _start 
    self._run()

File "/usr/local/lib/python2.7/dist-packages/tweepy/streaming.py", line 294, in _run
    raise exception

AutoReconnect: connection closed

【问题讨论】:

    标签: python mongodb pymongo tweepy


    【解决方案1】:

    尚不完全确定原因,但以下对有关 MongoDB 锁权限问题的问题的回答有助于解决此问题:https://stackoverflow.com/a/15982017/863923

    【讨论】:

      猜你喜欢
      • 2021-07-23
      • 2022-01-17
      • 2012-03-14
      • 1970-01-01
      • 1970-01-01
      • 2012-06-12
      • 2020-09-05
      • 1970-01-01
      • 2018-07-23
      相关资源
      最近更新 更多